MyBatis-plus+达梦数据库出现的坑

学海无涯,旅“途”漫漫,“途”中小记,如有错误,敬请指出,在此拜谢!

前情提要

今日,公司的项目使用的是达梦数据库7+jdk1.8+麒麟系统+SpringBoot+Mybatis-plus。走过了很多坑,特此记录,供给同胞们警醒。

问题汇总

1.Mybatis-plus的支持性

根据官网上的提供,mybatis-plus的generator自动生成器,在3.3.0以上的版本才能支持,所以如果想使用自动生成器的小伙伴,建议使用3.3.0以上的版本。

3.3.0以上的版本对达梦的支持性更强,建议直接使用3.3.0

2.Mybatis-plus的save&saveBatch

作为超级好用的Mybatis-plus,里面封装了好多方法供开发人员使用。但是有些方法是不兼容达梦数据库的。比如博主现在发现的save和saveBatch方法。所以此处建议使用自己手写的insert的sql来实现。

save和saveBatch方法,经过排查,发现是因为mp的save和saveBatch方法,生成的sql是有换行符的,这个换行符达梦数据库的部分版本是无法解析的。(可能是因为部分配置原因,也可能是因为版本原因。跟mp的研发人员交流说是达梦的问题,询问达梦的支持人员,没有解决,所以不了了之了。)

3.保存方法返回数据库id

一般在保存的方法的xml中,会加入一下语句,来确保方法会返回id。

useGeneratedKeys="true" keyProperty="id"

但是经过博主验证发现,使用批量插入的sql时,是无法传回id的,原因未知。(同样的版本,同样的方法,在mysql是可以回传的)

<insert id="insertBatchDm" useGeneratedKeys="true" keyProperty="id">
        insert into tables (column1,column2) values
        <foreach collection="list" item="item" separator=",">
            (#{item.1},#{item.2})
        </foreach>
    </insert>

4.保存方法后查询问题

发现了一个问题:在同一个事务中,如果先保存,再根据selectById查询该数据,无法查询出来。

public void a(){
	ClassA a = new ClassA();
	this.baseMapper.save(a);
	this.baseMapper.selectById(a.getId());//此处a.getId()能取出数据,但是selectById取出的数据为null
}

最终经过测试发现,博主的项目使用的是dmjdbc17+达梦7+jdk1.8。发现这个问题是必现的。经过跟达梦的巡视人员沟通,将dmjdbc的版本更新到了18之后,此问题解决。

5.达梦数据库建表之后再添加TEXT字段

在数据库设计完之后,发现一张表需要加一个大字段,使用如下语句执行后报错

alter tableadd column 字段 TEXT;

执行失败
第一行附近出现错误(-3243)
表XXX中不能同时包含聚集KEY和大字段

在于达梦的技术人员沟通后,他们解释”在达梦7.15版本之后聚集主键和大字段不能共存,需要修改达梦数据库的配置文件,将默认主键创建为普通主键,即非聚集,修改./data/数据库实例/dm.ini中的参数PK_WITH_CLUSTER改为0即可“。
但是有个问题,生产的库甲方在用着,没法修改配置重启啊。
最后通过查询百度得知方案:
方法1.删了表,然后再重新创建表,建表的时候不会有这样的问题
方法2.建表的时候

不要用
CLUSTER PRIMARY KEY("ID")

直接写成
NOT CLUSTER PRIMARY KEY("ID")
你好!对于使用 MyBatis-Plus 操作达梦数据库,你需要按照以下步骤进行配置和使用: 1. 添加 MyBatis-Plus达梦数据库的依赖: 在你的项目的 pom.xml 文件中添加以下依赖: ```xml <dependencies> <!-- MyBatis-Plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>最新版本</version> </dependency> <!-- 达梦数据库 --> <dependency> <groupId>com.dameng</groupId> <artifactId>Dm7JdbcDriver17</artifactId> <version>最新版本</version> </dependency> </dependencies> ``` 请确保替换 "最新版本" 为正确的版本号。 2. 配置数据源: 在你的项目的配置文件(如 application.properties 或 application.yml)中添加以下达梦数据库的配置: ```yaml spring.datasource.url=jdbc:dm://localhost:5236/your_database spring.datasource.driver-class-name=dm.jdbc.driver.DmDriver spring.datasource.username=your_username spring.datasource.password=your_password ``` 请将 "your_database" 替换为你自己的数据库名称,同时替换 "your_username" 和 "your_password" 为正确的用户名和密码。 3. 创建 MyBatis-Plus 的 Mapper 接口和实体类: 创建一个继承自 `BaseMapper` 的 Mapper 接口,并创建对应的实体类。例如: ```java // Mapper 接口 public interface UserMapper extends BaseMapper<User> { } // 实体类 @TableName("user") public class User { @TableId private Long id; private String username; private String password; // 省略 getter 和 setter } ``` 4. 使用 MyBatis-Plus 进行数据库操作: 在需要进行数据库操作的地方,注入对应的 Mapper 接口,并使用 MyBatis-Plus 提供的方法进行增删改查操作。例如: ```java @Service public class UserService { @Autowired private UserMapper userMapper; public void addUser(User user) { userMapper.insert(user); } public User getUserById(Long id) { return userMapper.selectById(id); } // 其他操作方法... } ``` 这样,你就可以使用 MyBatis-Plus达梦数据库进行操作了。 希望以上信息能对你有所帮助!如果你有任何其他问题,请随时提问。
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Doubletree_lin

老板,爱你,么么哒

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值