Ruoyi框架集成Mybatis-plus问题

最近在做数据同步,由于表的字段太多,不想手撸SQL,所以就集成了一下MP;具体的方法Ruoyi文档里都有。这里就是记录下遇到的一些问题及个人的解决方案。

1.在主键字段上加上@TableId(value = "xxx")的注解;

2. 在BaseEntity类的 params字段上,加上@TableField(exist = false)的注解。否则调用MP 的 IService.saveBatch方法时,会报错“Type handler was null on parameter mapping for property 'params‘ ”。

3.调用saveBatch方法,耗时很久。3w多条数据,耗时8w多毫秒。然后上网搜,说要在jdbc连接串上加上&rewriteBatchedStatements=true,这个属性就是让jdbc驱动去批量提交sql,说加上后速度就嗖嗖的。然而我的耗时毫无变化,又去搜为啥没效果,啥也没搜到,最后看到了一篇文章 MybatisPlus批量保存原理及失效原因排查_八球的博客-CSDN博客_mybatis plus 批量保存 。

得到的结论就是,saveBatch时,MP会把语句完全相同的sql分成一组,然后去批量提交。但是它拼接sql时会把空值的字段忽略掉,这样可能会导致每条数据的sql都不一样,那么就还是会一条一条的提交。然后结合我自己的情况,我的表都好几十个字段,而且空值分布不均匀,那么应该就是这个原因。然后看控制台打印的sql,确实都不太一样。

解决方案就是在可能为空的字段上加上@TableField(insertStrategy = FieldStrategy.IGNORED)的注解,这个注解会让MP在拼接insert的sql时,不考虑这个字段是否为空,都会拼进去。然后我直接在所有字段上都加了这个注解。

最后3w多条数据,大概2w毫秒左右。其实还是很慢,看网上说,加了rewriteBatchedStatements属性后,1w条数据大概就耗时500毫秒。而我这个慢了10倍多,最后也没找到原因以及优化方案。大概可能跟我的表字段较多有关吧。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值