注册
springboot+tk.mybatis/mybatis_plus+达梦数据库的个人经验
技术分享/ 文章详情 /

springboot+tk.mybatis/mybatis_plus+达梦数据库的个人经验

坏脾气 2024/03/27 2694 1 1

公司应客户的需求,要求本人由原来的mysql转变为达梦数据库,因此开始了一周的恶魔之旅。
废话不表,开始来硬菜:

1:达梦数据库的jar包一定要用你所安装的达梦文件夹下的,例如我window版的在D:\dmdbms\drivers\jdbc ,一般选择DmJdbcDriver18.jar这个jar包,如果你连接Windows环境下的达梦数据库做测试,那么一定要选择Windows安装文件下的,如果是Linux下的,一定要选择Linux环境下。这一点非常重要!!!**如果选择错了就会造成调用非自定义的insertSelective不能返回自增的ID,**但是改查是没问题的。需要注意的是自定义的sql在开启了useGeneratedKeys=“true” keyProperty=“id” keyColumn=“id” 也是没问题的。
例如:

<insert id=“insertSelective1” useGeneratedKeys=“true” keyProperty=“id” keyColumn=“id”
parameterType=“com.performax.platform.server.entity.SysAuthToken”>

</insert> 使用Windows下的jar包连接Linux系统下的数据库也是没问题。这一点很蛋疼。及其的蛋疼,我就是主要把时间花费在这里。

注意点:
请在自己项目下的resources下建立一个文件夹,如果叫libraries,那么配置如下:
<!-- 添加数据库驱动安装包 -->
<dependency>
<groupId>com.dameng</groupId>
<artifactId>Dm8JdbcDriver18</artifactId>
<version>1.8</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/libraries/DmJdbcDriver18.jar</systemPath>
</dependency>

2:自增主键的策略有用序列和不用序列。本文主要讨论不用使用序列的方式(使用序列的在本人了解原理后感觉十分的麻烦)

2.1:建表语句实例(这个建表语句和代码是相对于的,如果需要使用本人的源码,请在您的数据库执行):
CREATE TABLE test
(
ID INT IDENTITY(1, 1) NOT NULL PRIMARY KEY,
USER_NAME VARCHAR(20) DEFAULT ‘’ NOT NULL
);

这里有个小插曲,请大家注意下 用CREATE TABLE test和CREATE TABLE “test”(表名带双引号)建的是两张表,如果用带双引号的建表,在用drop table test 会显示找不到。一定要注意。一般不要使用带双引号的形式,因为数据迁移过来的表默认是不带双引号的。

3:如何解决在用非自定义的insertSelective报错Cause: dm.jdbc.driver.DMException: 仅当指定列列表,且SET IDENTITY_INSERT为ON时,才能对自增列赋值

其实也很简单,那就是重写源码:
拿tk.mybatis为例,在点击您使用的insertSelective处会跳转到源码InsertSelectiveMapper<T>,源码如下:
package tk.mybatis.mapper.common.base.insert;

import org.apache.ibatis.annotations.InsertProvider;
import tk.mybatis.mapper.annotation.RegisterMapper;
import tk.mybatis.mapper.provider.base.BaseInsertProvider;

@RegisterMapper
public interface InsertSelectiveMapper<T> {
@InsertProvider(
type = BaseInsertProvider.class,
method = “dynamicSQL”
)
int insertSelective(T record);
}

可以发现动态拼装sql的方法在BaseInsertProvider这个类里面,点击后可以发现有insertSelective方法。需要做的就是重写这个方法,其实也很简单:
就是在遍历的时候把column.isIdentity()==true的insertable属性设置为false,那么动态拼接的时候就不会将自增列插入进去。
在重新源码的时候最好也要注意位置。

4:注意开启useGeneratedKeys=“true”,这个用Java代码写在配置seqSessionFactory的地方,具体可以看代码。

5:关于如何验证Linux的达梦数据库,可以采用Oracle VM VirtualBox虚拟机和centos 7映像文件,例如我使用的名称为CentOS-7-x86_64-DVD-1511.iso(我很想上传,但是太大了,远远超过30M了)。我主要说的是在安装的时候可能您没法复制和上传该影像文件,这个时候可以用xshell和xftp去连接处理(Xshell和Xftp有学生版的,地址为:https://www.xshell.com/zh/free-for-home-school/)。还要注意网络设置一定要选择桥接模式。

1.PNG

源码如下:

demo.zip
在使用的时候一定要记得换成自己的jar包啊(连接Windows,用Windowsjar包,连接Linux,用Linux的jar包)!!!!!
在使用的时候一定要记得换成自己的jar包啊(连接Windows,用Windowsjar包,连接Linux,用Linux的jar包)!!!!!
在使用的时候一定要记得换成自己的jar包啊(连接Windows,用Windowsjar包,连接Linux,用Linux的jar包)!!!!!
在使用的时候一定要记得换成自己的jar包啊(连接Windows,用Windowsjar包,连接Linux,用Linux的jar包)!!!!!
在使用的时候一定要记得换成自己的jar包啊(连接Windows,用Windowsjar包,连接Linux,用Linux的jar包)!!!!!
在使用的时候一定要记得换成自己的jar包啊(连接Windows,用Windowsjar包,连接Linux,用Linux的jar包)!!!!!
在使用的时候一定要记得换成自己的jar包啊(连接Windows,用Windowsjar包,连接Linux,用Linux的jar包)!!!!!

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服