概述

在做某些业务的时候,涉及到批量增删改,可以直接调用mybatis-plus的增删改方法,不用自己去写了,能够节省很多的时间,下面我们对增删改的原理做一个简单的探究,并对比总结

批量增

在这里插入图片描述
我们看一下mybatis-plus中批量写入的源代码,

其中有这样一句话:
String sqlStatement = sqlStatement(SqlMethod.INSERT_ONE);
从命名可以看出这是从SqlMethod类中获取到写入一条的sqlStatement,我们点进去看,果然,INSERT_ONE是一条insert语句,
在这里插入图片描述

注意到它的insert是这样写的,

"<script>\nINSERT INTO %s %s VALUES %s\n</script>"

要插入的表名、字段名、值三个都是用%s,来代替,

在这里插入图片描述
要使用mybatis-plus的ServiceImpl的方法必须传入,mapper 对象和T 是实体,

那么可以猜想,INTO %s ,这个%s,表明是首先检查实体类上是否由@TableName注解,如果有通过注解获取到表明,如果没有根据实体对象名,逆转化为小写驼峰规则得到的,比如TbSpecification就转换为tb_specification,即为表名。

%s VALUES %s,第二个%s怎么获取呐?

在方法中有这样一句:
batchSqlSession.insert(sqlStatement, anEntityList);

对于 batchSqlSession.insert的解释是方法体这样的,

int insert(String statement, Object parameter);

解释是这样的
Execute an insert statement with the given parameter object。使用传入object作为insert的参数

那么可以猜测,%s VALUES %s,

而在方法中,try语句和for循环语句,那么其实,批量增加的设计思想也就很好懂了,它用mybatis的Batch进行批量插入的,也就是当 i 满足条件,或者for循环执行完,才将数据批量刷入到数据库中
在这里插入图片描述

注意这句,抛出任何异常则回滚,不向数据库中写入数据
在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐