写点什么

Spring Boot 与 MyBatis Plus 整合 KWDB 实现 JDBC 数据访问

作者:KaiwuDB
  • 2025-03-24
    北京
  • 本文字数:8611 字

    阅读完需:约 28 分钟

Spring Boot 与 MyBatis Plus 整合 KWDB 实现 JDBC 数据访问

引言

本文主要介绍如何在 IDEA 中搭建一个使用 Maven 管理的 Spring Boot 应用项目工程,并结合在本地搭建的 KWDB 数据库(版本为:2.0.3)来演示 Spring Boot 与 MyBatis Plus 的集成,以及对 KWDB 数据库的数据操作访问等。

技术选型

本文示例工程所使用的 JDK、Maven、Spring Boot 与 MyBatis Plus 的版本如下:


Maven:Apache Maven 3.6.3Spring Boot:2.7.18MyBatis Plus:com.baomidou:mybatis-plus-boot-starter:3.5.5
复制代码


本文选择 Spring Boot 作为应用框架、MyBatis Plus 作为 ORM 框架、KWDB 作为数据库的优点和适用场景如下:

标题 Spring Boot 应用框架优点和适用场景

• 简化开发:通过自动化配置和约定优于配置的方式,极大地简化了 Spring 应用程序的开发和部署过程;


• 集成度高:提供了大量的开箱即用的功能模块(如:数据访问等),支持快速集成第三方库和服务;


• 微服务支持:提供了微服务架构支持,可以轻松集成 Spring Cloud 等微服务框架;


• 生态系统强大:拥有庞大且活跃的社区,提供了丰富的文档、教程和支持,可以快速解决开发中的问题;


• 适用场景:适合构建各种类型的 Java 应用程序,特别是 Web 应用和微服务架构。

使用 Maven 管理项目的优点

• 依赖管理:能够有效管理项目所需的依赖库(如 JAR 包),支持自动下载、更新和配置这些依赖项;


• 标准化项目结构:定义了标准的项目结构,包括源代码、资源文件、测试代码等目录结构;


• 构建自动化:支持自动化构建,通过简单的命令即可完成复杂的构建任务;


• 插件生态系统:拥有丰富的插件生态系统,可以扩展其功能,支持各种任务和需求。

MyBatis Plus 框架的优点和适用场景

• 简化操作:提供了更便捷的 API 和更丰富的功能,简化了与数据库的交互操作;


• 代码生成:支持代码生成器,可以根据数据库表自动生成实体类、Mapper 接口以及基本的 CRUD 方法;


• 强大的条件构造器:提供了灵活而强大的条件构造器(Wrapper),可以通过构建条件对象来生成复杂的 SQL 查询语句,提高了开发效率;


• 适用场景:适合需要灵活控制 SQL 的项目工程。

KWDB 数据库的优点

• 多模数据支持:支持时序型和关系型数据采、存、算、管功能和数据跨模计算与分析;


• 高性能写入:依托“就地计算”技术实现高性能读写,支持千万级数据秒级写入和毫秒级精度数据写入;


• 实时查询与分析:支持数据实时分析,千万级数据聚合查询毫秒级响应,提供丰富的函数支持;


• 低成本:支持 10 倍以上的数据压缩,数据降采样存储,按“时间热度”进行数据生命周期管理;


• 多重安全性保障:支持身份鉴权、权限管理、数据库审计,以及通信加密和数据加密;


• 高兼容性:支持 SQL 语言,兼容 PG,MySQL 语法,支持 Java/C++ 等多种开发语言,支持 RestfulAPI;


• 适用场景:面向工业物联网、数字能源、车联网、智慧产业等各大行业领域。

环境搭建

1. 应用项目初始化

首先使用 IDEA 初始化创建一个 Spring Boot 项目工程,语言选中 Java,类型是 Maven 项目,JDK 选择 JDK8(也叫 JDK1.8),由于官网提供的 JDK 最低版本是 JDK17,所以在第 4 步 Java 选项中找不到 Java8 选项,但是阿里云提供了 JDK8 版本资源,因此将构建项目的 Server URL 服务地址更换为阿里云服务:start.aliyun.com,具体步骤如下:


a. 新建 Spring Boot 应用项目;



b. 点击下一步,选择要加载的依赖项,并完成创建;



c. 找到项目路径 /src/main/resources 中的 application.properties,将其修改为更常用的 application.yml 文件。



2. 引入 MyBatis Plus 依赖

在 kaiwudb-app 项目的 pom.xml 文件中引入 MyBatis Plus 的依赖项;


<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter --><dependency>    <groupId>com.baomidou</groupId>    <artifactId>mybatis-plus-boot-starter</artifactId>    <version>3.5.5</version></dependency>
复制代码

3. 引入 JDBC 依赖

JDBC 驱动尚未在 Maven 中央仓库中提供,用户需先获取 kaiwudb-jdbc-2.0.4.jar 文件,通过 Maven 管理工具,执行安装命令将 JDBC 驱动安装到本地 Maven 仓库中,安装命令如下:


#KaiwuDB JDBC 安装命令,其中 -Dfile 参数为安装包路径$ mvn install:install-file "-Dfile=../kaiwudb-jdbc-2.0.4.jar" "-DgroupId=com.kaiwudb" "-DartifactId=kaiwudb-jdbc" "-Dversion=2.0.4" "-Dpackaging=jar"
复制代码


在 kaiwudb-app 项目的 pom.xml 文件中引入 JDBC 驱动的依赖项;


XML<!-- kaiwudb jdbc 2.0.4 --><dependency>    <groupId>com.kaiwudb</groupId>    <artifactId>kaiwudb-jdbc</artifactId>    <version>2.0.4</version></dependency>
复制代码


pom.xml 文件在 IDEA 中引入 MyBatis Plus 依赖项显示如下:



应用配置

1. 数据源配置

数据源配置涉及到如何设置和管理数据库,包括数据库的连接信息、连接超时等参数。在 Spring Boot 中,通常通过配置文件(application.properties 或 application.yml)来配置数据源信息。


KWDB 支持关系和时序两种引擎,以下是连接操作 KWDB 数据库关系引擎时的数据源配置信息:


spring:  datasource:    url: jdbc:kaiwudb://127.0.0.1:26257/kwdb_app  # URL 链接地址    username: test  # 用户名    password: Password@2024  # 密码    driver-class-name: com.kaiwudb.Driver  # 驱动名
复制代码

2. MyBatis Plus 配置

配置 MyBatis Plus 包括但不限于设置 Mapper 扫描路径、配置全局参数、注入自定义 SQL 拦截器等。在 Spring Boot 中,可以通过配置文件(application.properties 或 application.yml)和配置类(如使用 @Configuration 注解的类)来配置 MyBatis Plus 的各项功能。


以下是在配置文件中对 MyBatis Plus 的相关配置信息:


mybatis-plus:  configuration:    map-underscore-to-camel-case: true  # 开启驼峰命名自动映射    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  # 开启日志打印  type-aliases-package: com.kaiwudb.app.entity  # 对应实体类路径  mapper-locations: classpath:mapper/*.xml   # 对应 mapper 映射 xml 文件
复制代码

数据库配置

KWDB 支持使用其提供的客户端命令行工具和图形化工具 KaiwuDB Developer Center(KDC),对 KaiwuDB 进行操作,这里我们使用 KaiwuDB 客户端命令行工具,在 KaiwuDB 数据库中创建关系数据库和关系表,如下:

创建一个关系数据库

create database kwdb_app;
复制代码



创建一个用于存储传感器数据的关系表


CREATE TABLE IF NOT EXISTS kwdb_app.sensor_data (    id SERIAL PRIMARY KEY,    sensor_id VARCHAR(20) NOT NULL,    temperature DOUBLE,    humidity DOUBLE,    pressure DOUBLE,    distance INT,    description VARCHAR(255),    is_active BOOLEAN DEFAULT true,    raw_data BYTEA,    record_time TIMESTAMP DEFAULT NOW(),    del_flag CHAR(1));
复制代码



应用示例

以物联网中常用传感器设备为例,本文以下示例将展示如何通过编写 SpringBoot+MyBatis Plus 应用程序,来实现对传感器设备数据进行增、删、改、查等,从而实现对 KaiwuDB 数据库中的数据进行 CRUD 访问操作。

1. 实体类

创建一个记录传感器数据的实体类 SensorData,需加入 @Data 和 @TableName 注解,使用 @Data 注解可以自动为实体类的字段生成 getter、setter、equals、canEqual、hashCode 和 toString 方法;使用 @TableName 注解用于指定实体类对应的数据表名称;


package com.kaiwudb.app.entity;
import com.baomidou.mybatisplus.annotation.TableField;import com.baomidou.mybatisplus.annotation.TableName;import lombok.Data;
import java.time.LocalDateTime;
@Data@TableName("sensor_data")public class SensorData { private Long id; // 主键,自动增长的唯一标识符 @TableField("sensor_id") private String sensorId; // 传感器的唯一标识符 private Double temperature; // 传感器读取的温度数据 private Double humidity; // 传感器读取的湿度数据 private Double pressure; // 传感器读取的压力数据 private Integer distance; // 传感器距离 private String description; // 传感器的详细描述信息 @TableField("is_active") private Boolean active; // 表示传感器是否处于活动状态 @TableField("raw_data") private byte[] rawData; // 存储传感器数据的原始字节 @TableField("record_time") private LocalDateTime recordTime; // 记录数据插入的时间戳 @TableField("del_flag") private String delFlag; // 传感器是否删除标志位,0-未删除,1-已删除}
复制代码


结果如下:



2. Mapper 接口

在 mapper 文件夹下创建 Mapper 接口 SensorDataMapper,继承 BaseMapper 接口,并使用 @Mapper 和 @Repository 注解,无需再手动实现基本的 CRUD 方法,MyBatis Plus 会自动生成;BaseMapper 是 MyBatis Plus 提供的一个接口,用于快速实现常见的数据库操作,如插入、更新、删除和查询等。


package com.kaiwudb.app.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;import com.kaiwudb.app.entity.SensorData;import org.apache.ibatis.annotations.Mapper;import org.springframework.stereotype.Repository;
@Mapper@Repositorypublic interface SensorDataMapper extends BaseMapper<SensorData> { // 自定义 SQL 方法}
复制代码


结果如下:



• 新增 mapper.xml(可选)


在 SensorDataMapper 接口类中支持用户自定义 SQL 方法,比如自定义按照 record_time 查询数据的接口;在 mapper 文件夹下的 SensorDataMapper 接口类新增内容如下:


List<SensorData> selectListBetweenTime(    @Param("beginTime") LocalDateTime beginTime,    @Param("endTime") LocalDateTime endTime);
复制代码


结果如下:



然后在 resources 资源目录下新建 mapper 文件夹,并新建 SensorDataMapper.xml 文件,在其中添加以下 SQL 内容:


• 注:select 标签中 id 为 selectListBetweenTime 的 SQL 语法,对应 mapper 中 selectListBetweenTime 接口;


<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.kaiwudb.app.mapper.SensorDataMapper">  <select id="selectListBetweenTime" resultType="com.kaiwudb.app.entity.SensorData">    SELECT *    FROM sensor_data    WHERE record_time BETWEEN #{beginTime} AND #{endTime}  </select></mapper>
复制代码

3. Service 服务

在 service 文件夹下创建 SensorDataService 接口服务类和其对应的实现类 SensorDataServiceImpl,并使用定义的 SensorDataMapper 数据访问接口类进行数据库操作;本文定义了如下示例接口,分别表示对传感器数据的增、改、删、查等,其中数据查询接口扩展了几种不同的查询方式,包括:按 ID 查询、按 sensorId 查询、按时间范围查询 和 查询全部数据 等;


(1)SensorDataService 接口服务类


package com.kaiwudb.app.service;
import com.kaiwudb.app.entity.SensorData;
import java.util.List;
public interface SensorDataService { int insertSensorData(SensorData data);
int updateSensorData(SensorData data);
int deleteById(Long id);
SensorData findById(Long id);
List<SensorData> findBySensorId(String sensorId);
List<SensorData> findByRecordTime(String beginTime, String endTime);
List<SensorData> findAll();}
复制代码


结果展示:



(2)SensorDataServiceImpl 接口服务实现类,其通过加载并调用 SensorDataMapper 接口类的方法,对数据库数据进行操作访问;package com.kaiwudb.app.service.impl;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;import com.kaiwudb.app.entity.SensorData;import com.kaiwudb.app.mapper.SensorDataMapper;import com.kaiwudb.app.service.SensorDataService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;
import java.time.LocalDateTime;import java.time.format.DateTimeFormatter;import java.util.List;
@Servicepublic class SensorDataServiceImpl implements SensorDataService { @Autowired private SensorDataMapper sensorDataMapper;
@Override public int insertSensorData(SensorData data) { return sensorDataMapper.insert(data); }
@Override public int updateSensorData(SensorData data) { return sensorDataMapper.updateById(data); }
@Override public int deleteById(Long id) { return sensorDataMapper.deleteById(id); }
@Override public SensorData findById(Long id) { return sensorDataMapper.selectById(id); }
@Override public List<SensorData> findBySensorId(String sensorId) { return sensorDataMapper.selectList(new QueryWrapper<SensorData>().eq("sensor_id", sensorId)); }
@Override public List<SensorData> findByRecordTime(String beginTime, String endTime) { LocalDateTime beginDateTime = LocalDateTime.parse(beginTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS")); LocalDateTime endDateTime = LocalDateTime.parse(endTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS")); return sensorDataMapper.selectListBetweenTime(beginDateTime, endDateTime); }
@Override public List<SensorData> findAll() { return sensorDataMapper.selectList(null); }}
复制代码


结果如下:



4.Controller 控制

在 controller 文件夹下创建一个 SensorDataController 控制器来处理 HTTP 请求,以下是操作请求传感器数据的示例实现,包括对传感器数据的增、改、删、查等操作;


package com.kaiwudb.app.controller;
import com.kaiwudb.app.entity.SensorData;import com.kaiwudb.app.service.SensorDataService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.format.annotation.DateTimeFormat;import org.springframework.web.bind.annotation.DeleteMapping;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.PutMapping;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController@RequestMapping("/sensor-data")public class SensorDataController { @Autowired private SensorDataService sensorDataService;
@PostMapping("/add") public int addSensorData(@RequestBody SensorData data) { return sensorDataService.insertSensorData(data); }
@PutMapping("/update") public int updateSensorData(@RequestBody SensorData data) { return sensorDataService.updateSensorData(data); }
@DeleteMapping("/{id}") public int deleteSensorDataById(@PathVariable Long id) { return sensorDataService.deleteById(id); }
@GetMapping("/{id}") public SensorData getSensorDataById(@PathVariable Long id) { return sensorDataService.findById(id); }
@GetMapping("/by-sensor-id/{sensorId}") public List<SensorData> getSensorDataBySensorId(@PathVariable String sensorId) { return sensorDataService.findBySensorId(sensorId); }
@GetMapping("/by-timestamp") public List<SensorData> getSensorDataByRecordTime( @RequestParam("beginTime") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS") String beginTime, @RequestParam("endTime") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS") String endTime) { return sensorDataService.findByRecordTime(beginTime, endTime); }
@GetMapping("/all") public List<SensorData> getAllSensorData() { return sensorDataService.findAll(); }}
复制代码


结果如下:



5. 主程序加注解

在新建 Spring Boot 应用项目的时,其会自动创建应用项目初始化运行的主类,通常放置在包的根目录下;本文中创建的主程序类文件名为 KaiwudbAppApplication,其会通过 public static void main(String[] args) 方法启动应用程序;本文需要在主程序中增加运行时需加载的配置类注解等,具体内容如下:


package com.kaiwudb.app;
import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication(scanBasePackages = "com.kaiwudb.app")public class KaiwudbAppApplication { public static void main(String[] args) { SpringApplication.run(KaiwudbAppApplication.class, args); }}
复制代码


结果如下:



• @SpringBootApplication 注解: Spring Boot 的核心注解,通常放在主类上,它整合了多个注解:@Configuration、@EnableAutoConfiguration 和 @ComponentScan。


a. @Configuration:用于定义配置类,可以包含 @Bean 方法来声明 Bean;


b. @EnableAutoConfiguration:使得 Spring Boot 能够根据类路径下的 jar 包、类、和各种属性设置来自动配置 Spring 应用程序;


c. @ComponentScan:默认扫描该类所在包及其子包下的所有组件类(包括 @Component, @Service, @Repository 等注解标记的类),并注册为 Spring Bean。


• scanBasePackages 参数: 指定了 Spring Boot 应该扫描的基础包路径,确保 Spring Boot 能够扫描到应用程序的所有组件类非常重要,包括控制器、服务、存储库等。

6. 启动应用程序

在 IDEA 中启动应用程序时,先找到类名为 KaiwudbAppApplication 的主程序,然后点击右键,在其中找到 Run 'KaiwudbAppApplication' 选项并选中来启动应用程序如下图所示:



启动成功后,在 IDEA 控制台中显示结果如下:



7. 访问操作示例

以下内容是在启动上述应用程序后,通过 Postman 工具以 Http 请求的方式来访问调用接口,从而通过每个接口实现的功能,来对 KaiwuDB 数据库中的数据进行操作使用等,示例如下:


• 增加数据(显示成功插入 1 条数据)



• 修改数据(显示成功修改 1 条数据)



• 删除数据(显示成功删除 1 条数据)



• 按 sensorId 查询数据(显示全部 sensorId 为 sensor002 的数据)



• 按时间范围查询(显示全部在查询时间范围内的数据)



总结

本文详细介绍了如何在 IDEA 中使用 Maven 管理的 Spring Boot 项目整合 KaiwuDB 数据库,并结合 MyBatis Plus 实现 JDBC 数据访问的过程。以下是关键点和总结:


• 技术选型和环境搭建:使用 OpenJDK 1.8、Apache Maven 3.6.3、Spring Boot 2.7.18 和 MyBatis Plus 3.5.5 版本;通过 IDEA 创建基于 Maven 的 Spring Boot 项目,并配置 Java 8 作为开发环境。


• MyBatis Plus 和 KaiwuDB 的集成:引入 MyBatis Plus 依赖,配置 Mapper 扫描路径和全局参数;KaiwuDB 的 JDBC 驱动需要手动安装到本地 Maven 仓库中,以便项目能够操作使用 KaiwuDB 数据库。


• 应用配置:数据源配置和 MyBatis Plus 配置是整合过程中的关键步骤,需要在 Spring Boot 的配置文件 application.yml 中进行配置,包括数据源的连接信息和 MyBatis Plus 的特定配置项。


• 数据库操作示例:创建 SensorData 实体类和 SensorDataMapper 接口,利用 MyBatis Plus 的 BaseMapper 接口快速实现常见的数据库操作;编写 SensorDataService 服务类来实现业务逻辑,通过 SensorDataMapper 进行数据库操作,例如增、删、改、查等。


• Controller 层和应用启动:编写 SensorDataController 来处理 HTTP 请求,定义接口访问路径,并通过 Service 层实现对数据库的操作;主程序类 KaiwudbAppApplication 通过 Spring Boot 的注解来配置和启动应用程序。


• 访问操作示例:使用 Postman 等工具通过 HTTP 请求访问 SensorDataController 定义的接口,从而操作和验证对 KaiwuDB 数据库中数据的增、删、改、查功能。


综上所述,本文通过详细的步骤和示例,展示了如何利用 Spring Boot、MyBatis Plus 和 KWDB 进行应用项目的开发,提供了整合过程中的关键点和可能的扩展方向。读者可以通过本文学习到如何搭建和配置环境、实现数据访问层的开发,以及如何利用 Spring Boot 快速开发和集成 KaiwuDB 数据库。

参考资料

本文 MyBatis Plus 插件的使用,参考了官网提供的使用说明文档,如有其他需要请参考官网文档>>https://baomidou.com/getting-started/

发布于: 2025-03-24阅读数: 6
用户头像

KaiwuDB

关注

还未添加个人签名 2021-04-29 加入

KaiwuDB 是浪潮集团控股的数据库企业,公司汇聚了全球顶尖的数据库人才,以多模数据库为核心产品,面向工业物联网、数字能源、交通车联网、智慧产业等各大行业领域,提供领先创新的数据服务软件。

评论

发布
暂无评论
Spring Boot 与 MyBatis Plus 整合 KWDB 实现 JDBC 数据访问_数据库_KaiwuDB_InfoQ写作社区