【Mybatis的批量处理】

Mybatis的批量处理操作

1. 一般批量处理

链接: mybatis批量更新数据三种方法效率对比

2. 使用BatchExecutor进行批量处理

方法一中的方法无法满足业务需要时,可使用Mybatis的批量处理器进行批量处理。

  1. 通过依赖注入的方式声明sqlSessionTemplate工具;
@Autowired
private SqlSessionTemplate sqlSessionTemplate;
  1. 先通过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();
  1. 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>
  1. 注意事项:
    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);

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值