整合Springboot+MybatisPlus+达梦数据库

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环境可视化软件的目录下:

在这里插入图片描述

但有可能这种导入pom会连接达梦数据库失败

 所以后来我换成这种,就没问题了,真离谱,具体原因没排查,也有可能是版本的问题

 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
   #若?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

 坑一:连接异常

 与其他数据连接不一样,不能直接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、将达梦数据库设置为大小写不敏感(目前我用这种,mysql的sql直接加个库名就好了,mysql项目完美迁移到达梦
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;
}

猜你喜欢

转载自blog.csdn.net/qq_38623939/article/details/130864204