1、安装Windows环境的达梦数据库可视化软件
这里不做安装介绍
安装步骤很简单,提供的软件也很全面,特别是数据库迁移工具,支持市面上许多主流的大型数据库,例如:Oracle、SQLServer、MySQL、DB2、PostgreSQL、Informix、Kingbase、Sybase等,本人亲测,十分好用,效率很高。但是就是达梦对存储长度要求严格,所以一些mysql varchar的长度要注意
2、SpringBoot + Mybatis-Plus配置
SpringBoot项目要想整合达梦数据库,首先驱动必定少不了,其次就是配置文件。
SpringBoot(我用的是2.5.14)和Mybatis-Plus的版本建议用新一点的(我用的是3.3.1):
<!--mybatis-plus包-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.1</version>
</dependency>
<!-- SpringBoot的依赖配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.5.14</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--达梦驱动-->
<dependency>
<groupId>com.dm</groupId>
<artifactId>DmJdbcDriver</artifactId>
<version>1.8.0</version>
</dependency>
注意:
这个jar包直接导入是不行,我是通过将jar包上传到我自己搭建的Maven私服仓库才可以导入,具体如何搭建请参考我写的这篇文章:jar包 加密 ----xjar (亲测可用)_小波波啊的博客-CSDN博客,文章里有写如何导入到自己的maven仓库,下图是驱动jar包的位置,是在安装有达梦Windows环境可视化软件的目录下:
2.2 yaml文件配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: dm.jdbc.driver.DmDriver
url: jdbc:dm://localhost:5236?schema=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
坑一:连接异常
与其他数据连接不一样,不能直接ip+端口/库名,需要ip+端口?schema=库名
附上我的数据库结构,达梦可以将数据库名和表名自动转换为大写(注意,创建达梦数据库实例的时候配置是否有勾选大小写敏感):
这样配置过后,项目基本就能运行起来了,下面总结一下我遇到的一些问题:
1.设置了大小写敏感
若设置了大小写敏感,那么假设库名和表名是小写的例如:sys_user,那么达梦的sql需要改成
select "id","name" from "库名(达梦叫模式名)"."sys_user" ,假设库名(模式名)是:dpmp
那么sql要这样 select "id","name" "from dpmp"."sys_user"
所以最麻烦的是这一点,也就是mybatis-plus封装的一些查询插入方法,用了都会报错,因为默认生成的sql不支持达梦
比如
因为达梦返回的小写字段名表名这些,凡是涉及到小写的都要加双引号"",所以直接用会报错,需要重写这些方法,重新写sql
【问题原因】
达梦数据库在设置成大小写敏感时,小写的标识符应用双引号括起,否则被转换为大写。报错时,整体状态为:达梦数据库设置的为大小写敏感,数据库表及字段都为小写。由报错可只,达梦在查询时,已经将数据库表sys_user转成了大写SYS_USER进行查询,因数据库中无大写的SYS_USER表,进而查询失败。
【解决方法】
1、将达梦数据库设置为大小写不敏感
2、重新编写SQL查询语句,将数据库表名及列名使用双引号括起来
3、将数据库表及列名改为大写
问题二:定时任务启动报错
启动服务后,由于配置了定时任务(quartz框架),读取定时任务配置文件,去查看定时任务时,报错找不到定时任务相关配置表,我这边用的是quartz.properties
注意:由于达梦是可以设置大小写不敏感的,所以不用在意大小写(注意在初始化库时设置),但是!!!注意!!!达梦访问表都是模式.表名访问,模式名即mysql的库名。
所以这里需要修改:
prop.put("org.quartz.jobStore.tablePrefix", "online_supervision.QRTZ_");
2.若没设置大小写敏感(方便,不需要重写大量mybatis-plus方法)
若建的库名和表名和字段名是小写(最好都建为大写),那么达梦自动返回大写
所以实体类需要加注解
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;
}