Ruoyi框架集成Mybatis-plus问题(1)
最近在做数据同步,由于表的字段太多,不想手撸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博客 。
得到的结论就是,saveBatch时,MP会把语句完全相同的sql分成一组,然后去批量提交。但是它拼接sql时会把空值的字段忽略掉,这样可能会导致每条数据的sql都不一样,那么就还是会一条一条的提交。然后结合我自己的情况,我的表都好几十个字段,而且空值分布不均匀,那么应该就是这个原因。然后看控制台打印的sql,确实都不太一样。
解决方案就是在可能为空的字段上加上@TableField(insertStrategy = FieldStrategy.IGNORED)的注解,这个注解会让MP在拼接insert的sql时,不考虑这个字段是否为空,都会拼进去。然后我直接在所有字段上都加了这个注解。
最后3w多条数据,大概2w毫秒左右。其实还是很慢,看网上说,加了rewriteBatchedStatements属性后,1w条数据大概就耗时500毫秒。而我这个慢了10倍多,最后也没找到原因以及优化方案。大概可能跟我的表字段较多有关吧。
原文链接:https://blog.csdn.net/a_bat/article/details/127009945
欢迎一起来学习和指导,谢谢关注!
本文来自博客园,作者:xiexie0812,转载请注明原文链接:https://www.cnblogs.com/mask-xiexie/p/17446408.html