mybatis - 批量更新操作

1.Mybatis

MyBatis是第一个支持自定义SQL、存储过程和高级映射的类持久框架。

所需依赖
<dependency>
		  <groupId>org.mybatis</groupId>
		  <artifactId>mybatis</artifactId>
		  <version>3.4.6</version>
</dependency>
<!-- 数据驱动包 -->
<dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>5.1.47</version>
</dependency>
层次结构图

在这里插入图片描述

组件
SqlSession: 会话,执行命令、获取映射、管理事务。
Executor:执行器,负责维护生成SQL语句、查询缓存。
StatementHandler:负责对JDBC statement 的操作,如设置参数、将Statement结果集转换成List集合。
ParameterHandler:负责将用户传入参数转换为JDBC Statement所需的参数。
ResultSetHandler: 负责将JDBC返回的ResultSet结果集对象转换成List类型的集合
TypeHandler: 用于Java类型和jdbc类型之间的转换
MappedStatement: 动态SQL的封装
SqlSource:表示从XML文件或注释读取的映射语句的内容,它创建将从用户接收的输入参数传递给数据库的SQL。
Configuration: MyBatis所有的配置信息都维持在Configuration对象之中

2.Executor

普通Executor分类:

ExecutorType.SIMPLE: 这个执行器类型不做特殊的事情。它为每个语句的执行创建一个新的预处理语句。(默认)
ExecutorType.REUSE: 这个执行器类型会复用预处理语句。
ExecutorType.BATCH: 这个执行器会批量执行所有更新语句。

批量插入例子

@Autowired
private SqlSessionTemplate sqlSessionTemplate;

public void saveBatch(List<Entity> insertList) {
	// 当前会话开启批量操作
    SqlSession session = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH,false);
    // 从会话中获取mapper
    CustomMapper mapper = session.getMapper(CustomMapper.class);
    try {
        for (int i = 0; i < insertList.size(); i++) {
            mapper.insert(insertList.get(i));
            // 一千条提交一次数据(如果超过一千条,则回滚事务不统一)
            if ((i % 1000 == 999) || (i == insertList.size() - 1)) {
                session.commit();	// 提交数据
                session.clearCache();	//清理缓存
            }
        }
        log.info("saveBatch end >>>>>>>>>>:" + insertList.size());
    } catch (Exception e) {
        log.error("saveBatch fail >>>>>>>>>>:" + e);
        session.rollback();	//异常回滚
    } finally {
        session.close();	// 关闭session
    }
}

参考文章:
mybatis SqlSession,SqlSessionFactory及spring SqlSessionTemplate
mybatis执行批量操作
MyBatis(十):Mybatis 几种批量操作的对比
MyBatis架构图

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值