这里不做安装介绍
安装步骤很简单,提供的软件也很全面,特别是数据库迁移工具,支持市面上许多主流的大型数据库,例如:Oracle、SQLServer、MySQL、DB2、PostgreSQL、Informix、Kingbase、Sybase等,本人亲测,十分好用,效率很高。但是就是达梦对存储长度要求严格,所以一些mysql varchar的长度要注意
SpringBoot项目要想整合达梦数据库,首先驱动必定少不了,其次就是配置文件。
SpringBoot(我用的是2.5.14)和Mybatis-Plus的版本建议用新一点的(我用的是3.3.1):
com.baomidou
mybatis-plus-boot-starter
3.3.1
org.springframework.boot
spring-boot-dependencies
2.5.14
pom
import
com.dm
DmJdbcDriver
1.8.0
注意:
这个jar包直接导入是不行,我是通过将jar包上传到我自己搭建的Maven私服仓库才可以导入,具体如何搭建请参考我写的这篇文章:jar包 加密 ----xjar (亲测可用)_小波波啊的博客-CSDN博客,文章里有写如何导入到自己的maven仓库,下图是驱动jar包的位置,是在安装有达梦Windows环境可视化软件的目录下:
但有可能这种导入pom会连接达梦数据库失败
所以后来我换成这种,就没问题了,真离谱,具体原因没排查,也有可能是版本的问题
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: dm.jdbc.driver.DmDriver
url: jdbc:dm://localhost:5236?schema=online_supervision
#若?schema=online_supervision连接不上,则用/online_supervision
#数据库的使用用户
username: SYSDBA
#实际使用数据库的密码
password: SYSDBA
mybatis-plus:
configuration:
cache-enabled: false
local-cache-scope: statement
global-config:
db-config:
logic-delete-value: 1
logic-not-delete-value: 0
schema: dpmp # 达梦需要加上这个,这是mybatis-plus的配置,如果不加,则查询不到该模式下的数据
mapper-locations: classpath:mapper/dm/*.xml
附上我的数据库结构,达梦可以将数据库名和表名自动转换为大写(注意,创建达梦数据库实例的时候配置是否有勾选大小写敏感):
这样配置过后,项目基本就能运行起来了,下面总结一下我遇到的一些问题:
若设置了大小写敏感,那么假设库名和表名是小写的例如:sys_user,那么达梦的sql需要改成
select "id","name" from "库名(达梦叫模式名)"."sys_user" ,假设库名(模式名)是:dpmp
那么sql要这样 select "id","name" "from dpmp"."sys_user"
所以最麻烦的是这一点,也就是mybatis-plus封装的一些查询插入方法,用了都会报错,因为默认生成的sql不支持达梦
比如
因为达梦返回的小写字段名表名这些,凡是涉及到小写的都要加双引号"",所以直接用会报错,需要重写这些方法,重新写sql
prop.put("org.quartz.jobStore.tablePrefix", "online_supervision.QRTZ_");
若建的库名和表名和字段名是小写(最好都建为大写),那么达梦自动返回大写
所以实体类需要加注解
package com.supervision.core.workTickets.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
@TableName("ddpmp.sys_user")
public class SysUser {
@TableId(value = "ID",type = IdType.ASSIGN_UUID)
private String id;
@TableField("NAME")
private String name;
}