特点 mybatis-plus(简称mp)是一个mybatis的增强工具,旨在mybatis的基础上只做增强不做改变,为简化开发、提高效率而生。
特点 「无侵入:」 只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
「损耗小:」 启动即会自动注入基本 curd,性能基本无损耗,直接面向对象操作
「强大的 crud 操作:」 内置通用 mapper、通用 service,仅仅通过少量配置即可实现单表大部分 crud 操作,更有强大的条件构造器,满足各类使用需求
「支持 lambda 形式调用:」 通过 lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
「支持主键自动生成:」 支持多达 4 种主键策略(内含分布式唯一 id 生成器 - sequence),可自由配置,完美解决主键问题
「支持 activerecord 模式:」 支持 activerecord 形式调用,实体类只需继承 model 类即可进行强大的 crud 操作
「支持自定义全局通用操作:」 支持全局通用方法注入( write once, use anywhere )
「内置代码生成器:」 采用代码或者 maven 插件可快速生成 mapper 、 model 、 service 、 controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
「内置分页插件:」 基于 mybatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 list 查询
「分页插件支持多种数据库:」 支持 mysql、mariadb、oracle、db2、h2、hsql、sqlite、postgre、sqlserver 等多种数据库
「内置性能分析插件:」 可输出 sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
「内置全局拦截插件:」 提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作
mp功能强大,但是上线后发现有一个问题,他内置的savebatch批量插入功能有着巨大的隐患,查看源码发现他是这么实现的
其中关键的方法executebatch源码为:
启动服务后,用postman调试,后台打印如下:
从图上可以看出这个所谓的批量插入接口,其实就是一个for循环插入,所以会对数据库产生很大的压力,第一反应是手工实现,这样
insert into test (a, b, c) values (#{item.a}, #{item.b}, #{item.c}) 但是仔细阅读源码发现,他的crud方法其实都是实现了一个叫做abstractmethod的类的,类继承如图
其中我们看到有一个方法是insertbatchsomecolumn,这个方法实际上就是我们手写的那种批量插入的功能的实现了,我们现在要做的是把这个方法注入到我们的工程中,并且替换掉之前的savebatch方法
第一步:新增我们自己的sql注入器,用来扩展批量插入
public class cxmsqlinjector extends defaultsqlinjector{ @override public list getmethodlist(class mapperclass) { // 防止父类的方法不可使用 list methodlist = super.getmethodlist(mapperclass); // 添加批量插入的方法 methodlist.add(new insertbatchsomecolumn()); return methodlist; } } 第二步:把上面的类注入到spring中
第三步:在我们的basedao中声明该方法
第四步:重写savebatch
最后再调用savebatch的时候就会发现完成了批量插入的时候不是for 循环插入了,大功告成!!!
比特币扩容之争的缘由阐述
pcb半导体对高速信号传输的挑战
手机无线充电技术或许会对电池造成损伤
中国电信与华为携手打造省干光立方网络
对于储能行业合理补偿机制是否能够撬动市场需求
Mybatis-plus批量插入太慢?
薄膜电容器的最新发展趋势
三相可控硅半控桥数字触发器的设计
雷士照明斥5亿收购蔚蓝芯光60%股权
中国移动发布5G+计划 !
5G换机潮要到了 手机产业链公司纷纷募资
中国最大MEMS企业歌尔股份,上半年营收451.73亿元
云天励飞边缘计算盒子助力道路维护工作从经验决策走向数据决策
全球及美国首张无人机配送商业化“驾照”先后落地
无符号整型能产生哪些bug?
mClinux系统特点深入分析
链享云科技的愿景将是打造出全球第一商用公链
全球LCD面板价格持续上涨
我们离不开的电源管理IC芯片基础知识科普
软开关转换器的输出电容设计