mybatis-plus批量insert原理探究
概述在做某些业务的时候,涉及到批量增删改,可以直接调用mybatis-plus的增删改方法,不用自己去写了,能够节省很多的时间,下面我们对增删改的原理做一个简单的探究,并对比总结批量增我们看一下mybatis-plus中批量写入的源代码,其中有这样一句话:String sqlStatement = sqlStatement(SqlMethod.INSERT_ONE);从命名可以看出这是从SqlMe
概述
在做某些业务的时候,涉及到批量增删改,可以直接调用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循环执行完,才将数据批量刷入到数据库中
注意这句,抛出任何异常则回滚,不向数据库中写入数据
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)