Spring Boot 集成达梦数据库实现增删改查
达梦(DM)是国产关系型数据库,Spring Boot 集成达梦的方式和 MySQL 基本一致,核心差异在于**驱动依赖**、**连接配置**和少量 SQL 语法(达梦兼容大部分 MySQL/Oracle 语法)。下面我会一步步带你实现完整的增删改查(CRUD)。
一、前置准备
- 达梦数据库环境:
- 安装达梦数据库(DM8 为例),创建数据库实例、用户(如
TEST_USER)和待操作的表(示例用user_info表)。 - 示例表结构(达梦 SQL):
sql CREATE TABLE user_info ( id BIGINT PRIMARY KEY AUTO_INCREMENT, -- 达梦支持AUTO_INCREMENT,也可用IDENTITY username VARCHAR(50) NOT NULL, age INT, create_time DATETIME DEFAULT CURRENT_TIMESTAMP );
- 开发环境:JDK 8+、Maven/Gradle、Spring Boot 2.x/3.x。
二、核心步骤(完整代码实现)
1. 引入依赖(pom.xml)
需引入达梦驱动、Spring Data JPA/MyBatis(二选一,这里以更通用的 MyBatis-Plus 为例,简化 CRUD 代码):
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.18</version> <!-- 适配达梦驱动,2.x 更稳定 -->
<relativePath/>
</parent>
<groupId>com.example</groupId>
<artifactId>dm-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>dm-demo</name>
<dependencies>
<!-- Spring Boot Web 核心 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 达梦数据库驱动(DM8) -->
<dependency>
<groupId>com.dameng</groupId>
<artifactId>Dm8JdbcDriver18</artifactId>
<version>8.1.2.193</version> <!-- 版本需与达梦数据库匹配 -->
</dependency>
<!-- MyBatis-Plus(简化CRUD,无需手写SQL) -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3.1</version>
</dependency>
<!-- 数据库连接池(HikariCP,Spring Boot 默认) -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</dependency>
<!-- Lombok(简化实体类) -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- 测试依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
2. 配置数据库连接(application.yml)
在 src/main/resources 下创建 application.yml,配置达梦连接信息:
spring:
# 数据库连接配置
datasource:
driver-class-name: dm.jdbc.driver.DmDriver # 达梦驱动类名(固定)
url: jdbc:dm://127.0.0.1:5236/TEST_DB?characterEncoding=utf8&useUnicode=true # 连接串
# 说明:127.0.0.1(达梦IP)、5236(默认端口)、TEST_DB(数据库名)
username: TEST_USER # 达梦用户名
password: 123456789 # 达梦密码
# 连接池配置(可选,优化性能)
hikari:
maximum-pool-size: 10
minimum-idle: 5
connection-timeout: 30000
# MyBatis-Plus 配置
mybatis-plus:
mapper-locations: classpath:mapper/**/*.xml # 若手写XML,指定路径
type-aliases-package: com.example.dmdemo.entity # 实体类包路径
configuration:
map-underscore-to-camel-case: true # 下划线转驼峰(达梦表字段建议用下划线)
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 打印SQL日志(调试用)
3. 编写实体类(Entity)
对应 user_info 表,创建 UserInfo.java:
package com.example.dmdemo.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.time.LocalDateTime;
/**
* 用户信息实体类(对应达梦user_info表)
*/
@Data // Lombok自动生成get/set/toString等
@TableName("user_info") // 指定达梦表名(大小写不敏感,达梦默认大写)
public class UserInfo {
/**
* 主键(自增)
*/
@TableId(type = IdType.AUTO) // 达梦支持AUTO_INCREMENT,对应IdType.AUTO
private Long id;
/**
* 用户名
*/
private String username;
/**
* 年龄
*/
private Integer age;
/**
* 创建时间
*/
private LocalDateTime createTime;
}
4. 编写 Mapper 接口(MyBatis-Plus 简化版)
创建 UserInfoMapper.java,继承 MyBatis-Plus 的 BaseMapper,无需手写 CRUD SQL:
package com.example.dmdemo.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.dmdemo.entity.UserInfo;
import org.apache.ibatis.annotations.Mapper;
/**
* 用户信息Mapper(MyBatis-Plus自动实现CRUD)
*/
@Mapper // 标记为MyBatis Mapper接口
public interface UserInfoMapper extends BaseMapper<UserInfo> {
// 无需写任何方法,BaseMapper已包含:insert/delete/update/select等
}
5. 编写 Service 层(业务逻辑)
创建 UserInfoService.java 接口和实现类:
// 接口
package com.example.dmdemo.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.example.dmdemo.entity.UserInfo;
public interface UserInfoService extends IService<UserInfo> {
}
// 实现类
package com.example.dmdemo.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.dmdemo.entity.UserInfo;
import com.example.dmdemo.mapper.UserInfoMapper;
import com.example.dmdemo.service.UserInfoService;
import org.springframework.stereotype.Service;
@Service
public class UserInfoServiceImpl extends ServiceImpl<UserInfoMapper, UserInfo> implements UserInfoService {
// IService已封装:新增、删除、修改、分页查询等方法,无需手写
}
6. 编写 Controller 层(接口暴露)
创建 UserInfoController.java,实现 RESTful 风格的增删改查接口:
package com.example.dmdemo.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.example.dmdemo.entity.UserInfo;
import com.example.dmdemo.service.UserInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 用户信息CRUD接口
*/
@RestController
@RequestMapping("/user")
public class UserInfoController {
@Autowired
private UserInfoService userInfoService;
/**
* 新增用户(POST)
*/
@PostMapping
public ResponseEntity<String> addUser(@RequestBody UserInfo userInfo) {
boolean save = userInfoService.save(userInfo);
return save ? ResponseEntity.ok("新增成功") : ResponseEntity.badRequest().body("新增失败");
}
/**
* 删除用户(DELETE)
*/
@DeleteMapping("/{id}")
public ResponseEntity<String> deleteUser(@PathVariable Long id) {
boolean remove = userInfoService.removeById(id);
return remove ? ResponseEntity.ok("删除成功") : ResponseEntity.badRequest().body("删除失败");
}
/**
* 修改用户(PUT)
*/
@PutMapping
public ResponseEntity<String> updateUser(@RequestBody UserInfo userInfo) {
boolean update = userInfoService.updateById(userInfo);
return update ? ResponseEntity.ok("修改成功") : ResponseEntity.badRequest().body("修改失败");
}
/**
* 根据ID查询单个用户(GET)
*/
@GetMapping("/{id}")
public ResponseEntity<UserInfo> getUserById(@PathVariable Long id) {
UserInfo userInfo = userInfoService.getById(id);
return ResponseEntity.ok(userInfo);
}
/**
* 查询所有用户(GET)
*/
@GetMapping
public ResponseEntity<List<UserInfo>> getAllUsers() {
List<UserInfo> list = userInfoService.list();
return ResponseEntity.ok(list);
}
/**
* 条件查询(如按用户名模糊查询)
*/
@GetMapping("/search")
public ResponseEntity<List<UserInfo>> searchUser(@RequestParam String username) {
LambdaQueryWrapper<UserInfo> wrapper = new LambdaQueryWrapper<>();
wrapper.like(UserInfo::getUsername, username); // 模糊查询
List<UserInfo> list = userInfoService.list(wrapper);
return ResponseEntity.ok(list);
}
}
7. 启动类(主程序)
package com.example.dmdemo;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* 启动类
* @MapperScan 扫描Mapper接口包
*/
@SpringBootApplication
@MapperScan("com.example.dmdemo.mapper") // 扫描Mapper接口
public class DmDemoApplication {
public static void main(String[] args) {
SpringApplication.run(DmDemoApplication.class, args);
}
}
三、测试验证
- 启动项目:运行
DmDemoApplication,控制台无报错即启动成功(可看到 MyBatis 打印的 SQL 日志)。 - 接口测试(用 Postman/ApiPost 等工具):
- 新增用户:POST
http://localhost:8080/user,请求体:
json { "username": "张三", "age": 25 } - 查询所有用户:GET
http://localhost:8080/user,返回新增的用户数据。 - 修改用户:PUT
http://localhost:8080/user,请求体:
json { "id": 1, "username": "张三_修改", "age": 26 } - 删除用户:DELETE
http://localhost:8080/user/1。
四、关键注意事项
- 达梦驱动版本:必须与达梦数据库版本匹配(如 DM8 用
Dm8JdbcDriver18,DM7 用Dm7JdbcDriver18)。 - 连接串格式:
- 基础格式:
jdbc:dm://IP:端口/数据库名; - 若达梦配置了实例名:
jdbc:dm://IP:端口?Schema=实例名; - 若需兼容 Oracle 语法:
jdbc:dm://IP:端口/数据库名?compatibleMode=oracle。
- 表/字段名大小写:达梦默认表名、字段名大写,MyBatis-Plus 的
@TableName建议显式指定(或配置全局小写)。 - 自增主键:达梦支持
AUTO_INCREMENT(兼容 MySQL)和IDENTITY(兼容 Oracle),MyBatis-Plus 中IdType.AUTO均可适配。
总结
- 核心配置:Spring Boot 集成达梦的关键是引入正确的驱动依赖、配置达梦专属的 JDBC 连接串和驱动类名。
- CRUD 实现:基于 MyBatis-Plus 可大幅简化代码,无需手写基础 CRUD SQL,仅需定义实体类和 Mapper 接口。
- 兼容性:达梦兼容大部分 MySQL/Oracle 语法,现有 Spring Boot 项目迁移到达梦时,仅需修改连接配置和驱动,少量 SQL 需适配(如分页、函数)。
如果需要手写 SQL(不用 MyBatis-Plus),只需在 Mapper 接口中定义注解式 SQL(如 @Select("SELECT * FROM user_info WHERE id = #{id}")),逻辑与 MySQL 完全一致。