整合Springboot+MybatisPlus+达梦数据库

news/2024/11/8 0:31:18/

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.DruidDataSourcedriver-class-name: dm.jdbc.driver.DmDriverurl: jdbc:dm://localhost:5236?schema=online_supervision#若?schema=online_supervision连接不上,则用/online_supervision#数据库的使用用户username: SYSDBA#实际使用数据库的密码password: SYSDBAmybatis-plus:configuration:cache-enabled: falselocal-cache-scope: statementglobal-config:db-config:logic-delete-value: 1logic-not-delete-value: 0schema: 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;
}


http://www.ppmy.cn/news/83282.html

相关文章

centos下编译ffmpeg+ libfdk_aac +x264

因为FFmpeg自带的AAC编码器已经废弃了AV_SAMPLE_FMT_S16格式PCM编码AAC,如果使用FFmpeg自带的AAC编码器,就需要做音频的重采样(AV_SAMPLE_FMT_S16重采样为:AV_SAMPLE_FMT_FLTP), 如果不想自己做重采样转换,可以使用libfdk-aac这库。 编译FFMPEG之前,先编译好libfdk-aac…

openldap介绍以及使用

参考文献&#xff1a;openldap介绍和使用 基本概念 官网&#xff1a;https://www.openldap.org 官方文档&#xff1a;https://www.openldap.org/doc LDAP是一个开放的&#xff0c;中立的&#xff0c;工业标准的应用协议&#xff0c;通过IP协议提供访问控制和维护分布式信息的…

【星戈瑞】BODIPY-530/550氟化硼二吡咯荧光染料

BODIPY是一种荧光染料&#xff0c;其分子结构稳定、荧光强度高、荧光寿命长、光谱范围广&#xff0c;因此在许多领域都有应用。在生物医学领域&#xff0c;BODIPY作为荧光探针&#xff0c;可用于细胞成像、生物分子探测、药物筛选等方面。例如&#xff0c;一些研究者将BODIPY修…

Vue3:组件基础(下)

Vue3&#xff1a;组件基础&#xff08;下&#xff09; Date: April 12, 2023 Sum: props验证、计算属性、自定义时间、组件上的v-model、任务列表案例 目标&#xff1a; 能够知道如何对 props 进行验证 能够知道如何使用计算属性 令能够知道如何为组件自定义事件 令能够知…

动态通讯录实现(C语言)

目录 前言&#xff1a; 一&#xff1a;单个节点的设计和主逻辑 结点设计 主逻辑 二&#xff1a;接口实现 (1)生成一个新的结点 (2)增加信息 (3)打印信息 (4)查找 (5)删除信息 (6)修改信息 (7)排序 插入排序 快速排序 (8)已有数据读取 (9)更新数据录入 三&…

netcore都有什么设计模式

.NET Core 框架支持许多设计模式&#xff0c;以下是一些常见的设计模式&#xff1a; 一、抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09;&#xff1a;提供一种将一组相关或相互依赖的对象创建起来的方式&#xff0c;而无需指定其具体类。 抽象工厂模式是一种…

Java中常见的运行时异常

ArithmeticException :算数运算异常&#xff0c;由于除数为0引起的异常&#xff1b;ClassCast Exception: 类型转换异常&#xff0c;当把一个对象归为某个类&#xff0c;但实际上此对象并不是由这个类创建的&#xff0c;也不是其子类创建的&#xff0c;则会引起异常&#xff1b…

ES6中的解构赋值

解构赋值 在JavaScript中&#xff0c;解构赋值是一项非常有用的特性&#xff0c;它可以让我们方便地从数组和对象中提取值并赋给变量。这个特性实际上是一种语法糖&#xff0c;它可以让我们更加方便地获取想要的数据&#xff0c;减少代码的冗余和复杂度。 数组解构赋值 我们…