Mybatis的批量处理操作
1. 一般批量处理
2. 使用BatchExecutor进行批量处理
若方法一中的方法无法满足业务需要时,可使用Mybatis的批量处理器进行批量处理。
- 通过依赖注入的方式声明sqlSessionTemplate工具;
@Autowired
private SqlSessionTemplate sqlSessionTemplate;
- 先通过sqlSessionTemplate获取工厂实例,然后再获取指定执行器的sqlSession,最后在通过sqlSession来获取对应的Mapper执行sql语句;
当使用的是批量执行器时需要手动提交事务;
List<SjgxRyxx> sjgxRyxxes1 = new ArrayList<>();
//业务代码,为sjgxRyxxes1赋值等;
SqlSession sqlSession = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH, false);
SjgxRyxxMapper mapper = sqlSession.getMapper(SjgxRyxxMapper.class);
sjgxRyxxes1.forEach(sjgxRyxx -> {
mapper.update(sjgxRyxx); //调用的sql语句还是最普通的sql
});
sqlSession.commit();//在获取sqlSession时设置, 需要注意的时, 如果选择的是批量执行器时, 需要手工提交事务
sqlSession.clearCache();
- mapper文件中的sql语句:
<update id="update">
update sjgx_ryxx
<set>
gxsj = #{ry.gxsj},
<if test="ry.yldyzfzt != null">yldyzfzt = #{ry.yldyzfzt},</if>
<if test="ry.jbyldy != null">jbyldy = #{ry.jbyldy},</if>
</set>
where ryid = #{ry.ryid}
</update>
- 注意事项:
SqlSessionFactory: 创建SqlSession实例的工厂。
SqlSession: 用于执行持久化操作的对象,类似于jdbc中的Connection。
SqlSessionTemplate: MyBatis提供的持久层访问模板化的工具,线程安全,可通过构造参数或依赖注入SqlSessionFactory实例。
SqlSession的用途主要有两种:
①. 获取对应的Mapper,让映射器通过命名空间和方法名称找到对应的SQL,发送给数据库执行后返回结果。
RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class);
Role role = roleMapper.getRole(1L);
②. 直接使用SqlSession,通过命名信息去执行SQL返回结果,该方式是IBatis版本留下的,SqlSession通过Update、Select、Insert、Delete等方法操作。
Role role = (Role)sqlSession.select(“com.mybatis.mapper.RoleMapper.getRole”,1L);