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 into tables (column1,column2) values
        
            (#{item.1},#{item.2})
        
    

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之后,此问题解决。

你可能感兴趣的:(工作记录,达梦,mybatis-plus)