MyBatis_sqlsession.flushStatements(作用总结

MyBatis_sqlsession.flushStatements(作用总结;
当有处于事物中的时候
sqlSession.flushStatements();起到一种预插入的作用(执行了这行代码之后,要插入的数据会锁定数据库的一行记录,并把数据库默认返回的主键赋值给插入的对象,这样就可以把该对象的主键赋值给其他需要的对象中去了)

下面是代码跟踪过程

1.刚接收参数:可以看到这个时候id是为null的
这里写图片描述

2.刚执行为插入的时候,id也是为Null的
这里写图片描述

3.执行了sqlsession.flushStatements();之后,可以看到这个时候是有id了的,但是查看数据库,是没有这条记录的
这里写图片描述

4数据库记录
这里写图片描述

5.从下面两个图片中可以看出,传入对象和返回都是一个对象.是不是可以考虑不用赋值返回值了?反正都是指向一个地址
这里写图片描述

6这里写图片描述

使用Mybatis-plus进行批量修改时,官方提供的方法是基于id来修改的。但是有时候我们需要修改其他字段,这时候需要自己进行扩展。 你可以参考中提到的代码,自定义一个工具类,例如`MybatisBatchUtils`,该工具类可以实现在Mybatis环境下进行批量修改操作。该工具类中的`batchUpdateOrInsert`方法可以接收一个数据列表、一个Mapper类以及一个函数,用于批量修改数据。 具体步骤如下: 1. 首先,创建一个工具类,例如`MybatisBatchUtils`,并添加`@Component`注解,以使其成为Spring的一个组件。 2. 在该工具类中,定义一个常量`BATCH_SIZE`,用于指定批量操作的大小。 3. 使用`@Autowired`注解注入`SqlSessionFactory`,以获取SqlSession对象。 4. 编写`batchUpdateOrInsert`方法,该方法接收三个参数:数据列表、Mapper类以及一个函数。其中,数据列表用于存储要修改的数据,Mapper类用于执行对应的SQL语句,函数用于对每条数据进行修改操作。 5. 在方法中,使用`sqlSessionFactory.openSession(ExecutorType.BATCH)`来创建批量操作的SqlSession对象。 6. 循环遍历数据列表,在每次循环中,使用函数对当前数据进行修改操作,并在满足批量操作大小或已到达数据列表末尾时,通过`batchSqlSession.flushStatements()`来刷新缓存的SQL语句。 7. 在循环结束后,根据是否存在事务,使用`batchSqlSession.commit`来提交事务。 8. 若发生异常,使用`batchSqlSession.rollback()`进行回滚,并抛出异常。 9. 最后,记得关闭batchSqlSession。 通过以上步骤,你可以自定义一个批量修改方法来满足你的需求。 参考资料: : 使用Mybatis-plus可以很方便的实现批量新增和批量修改,不仅比自己写foreach遍历方便很多,而且性能也更加优秀。但是Mybatis-plus官方提供的批量修改和批量新增都是根据id来修改的,有时候我们需求其他字段,所以就需要我们自己修改一下。 : 有时候项目里没有引用Mybatis-plus,但是也想进行批量操作,数据量大了后foreach循环会影响性能。所以可以参考Mybatis-plus的批量操作,编写在mybatis环境下的批量操作,代码如下: @Component public class MybatisBatch
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值