主要是org.apache.ibatis.executor.BatchExecutor这个类,此类继承BaseExecutor(基本增删改查,缓存,懒加载处理)
BatchExecutor这个类有四个属性
//批处理更新最大返回结果
public static final int BATCH_UPDATE_RETURN_VALUE = Integer.MIN_VALUE + 1002;
//存放声明(命令)对象集合
private final List<Statement> statementList = new ArrayList<Statement>();
// 批处理结果集合
private final List<BatchResult> batchResultList = new ArrayList<BatchResult>();
//当前sql语句
private String currentSql;
一个带参数构造函数,传入配置信息和事务对象
public BatchExecutor(Configuration configuration, Transaction transaction) {
super(configuration, transaction);
}
重写了三个方法, 1.更新方法 2.查询方法 3.刷新方法
我们来看批量更新doUpdate
public int doUpdate(MappedStatement ms, Object parameterObject)
throws SQLException {
Configuration configuration = ms.getConfiguration();
StatementHandler handler = configuration.newStatementHandler(this, ms, parameterObject, RowBounds.DEFAULT, null);
BoundSql boundSql = handler.getBoundSql();
String sql = boundSql.getSql();
Statement stmt;
if (currentSql != null && sql.hashCode() == currentSql.hashCode() && sql.length() == currentSql.length()) {
int last = statementList.size() - 1;
stmt = statementList.get(last);
} else {
Connection connection = transaction.getConnection();
stmt = handler.prepare(connection);
currentSql = sql;
statementList.add(stmt);
batchResultList.add(new BatchResult(ms, sql, parameterObject));
}
handler.parameterize(stmt);
handler.batch(stmt);
return BATCH_UPDATE_RETURN_VALUE;
}
最重要一句话就是handler.batch(stmt),实际上就是stmt.addBatch();
举个小例子来说明:
//记录1
stmt.setInt(1, 1);
stmt.setString(2, "Cujo");
stmt.addBatch();
//记录2
stmt.setInt(1, 2);
stmt.setString(2, "Fred");
stmt.addBatch();
//记录3
stmt.setInt(1, 3);
stmt.setString(2, "Mark");
stmt.addBatch();
//批量执行上面3条语句
int [] counts = statement.executeBatch();
//Commit it
connection.commit();
如果项目中要用到批量更新如何使用?
下面的映射文件,假设namespace="com.dao.Stuent"
<insert id="insertbatch" parameterType="java.util.List">
<selectKey keyProperty="fetchTime" order="BEFORE"
resultType="java.lang.String">
SELECT CURRENT_TIMESTAMP()
</selectKey>
insert into kangaiduoyaodian ( depart1, depart2, product_name,
generic_name, img, product_specification, unit,
approval_certificate, manufacturer, marketPrice, vipPrice,
website, fetch_time, productdesc ) values
<foreach collection="list" item="item" index="index"
separator=",">
( #{item.depart1}, #{item.depart2}, #{item.productName},
#{item.genericName}, #{item.img},
#{item.productSpecification}, #{item.unit},
#{item.approvalCertificate}, #{item.manufacturer},
#{item.marketprice}, #{item.vipprice}, #{item.website},
#{fetchTime}, #{item.productdesc} )
</foreach>
</insert>
调用: SqlSession session = factory.openSession(ExecutorType.BATCH); //关键是这句
原文: http://www.ibatis3.com/thread-111-1-1.html
分享到:
相关推荐
MyBatis是一款流行的Java...总的来说,MyBatis源码分析思维导图会涵盖MyBatis的各个关键组件、工作流程、特性以及扩展机制。通过深入学习和理解这些内容,开发者能够更好地利用MyBatis进行数据库操作,并优化其性能。
通过对MyBatis源码的分析,开发者可以更深入地理解其内部运作机制,从而更好地优化应用,解决实际问题。同时,这也是一种提升个人技术水平和解决问题能力的有效途径。在阅读源码过程中,可能会遇到各种设计模式和...
源码分析是理解框架工作原理的重要途径,通过阅读MyBatis的源码,我们可以深入学习其内部机制,包括SQL动态生成、结果映射、事务管理等方面。 1. SQL动态生成:MyBatis的核心之一是SQL动态语句。在XML配置文件或...
深入学习MyBatis源码,可以让我们在开发过程中更好地利用它,避免潜在的问题,并且能够根据项目需求进行扩展和定制。对于有经验的开发者,源码分析有助于优化数据库操作,提高应用程序的性能。总之,"mybatis-3-...
"尚硅谷"的Mybatis源码分析部分可能涵盖了Mybatis的内部设计和实现细节,包括上述组件的源代码解读,这对于理解Mybatis的工作流程和优化代码非常有帮助。同时,提供的课件可能包含了如何使用Mybatis进行开发、配置...
MyBatis 源码分析与实现 在深入探讨 MyBatis 源码之前,我们先了解一下 MyBatis 的基本架构。MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。其核心功能包括 SQL 映射文件、动态 SQL ...
- 分析MyBatis的源码,了解其内部实现机制,如如何解析XML配置文件,如何生成动态代理等。 - 学习如何配置MyBatis环境,包括设置数据源、创建SqlSessionFactory等。 - 熟悉Mapper接口和XML映射文件的编写,理解SQL与...
MyBatis的源码分析可以从以下几个方面入手: 1. SqlSessionFactory的创建流程:理解如何从配置文件构建SqlSessionFactory。 2. SQL的动态生成:研究MyBatis如何根据方法参数动态拼接SQL。 3. Executor的执行过程:...
这个"mybatis全中文注释源码版.zip"文件包含了一个经过全面中文注释的MyBatis源码版本,对于想要深入理解和学习MyBatis工作原理的开发者来说,这是一个宝贵的资源。 首先,我们来看看MyBatis的核心组件: 1. **...
在源码分析中,我们可以重点关注以下几个模块: 1. **SqlRunner**:这是MyBatis-Plus的核心执行器,负责执行SQL语句。 2. **Executor**:执行器接口,包含SimpleExecutor、ReuseExecutor、BatchExecutor等不同类型...
Mybatis-Self 是一个专注于Mybatis源码分析的项目,旨在帮助开发者深入理解Mybatis的工作原理,提升在实际开发中的应用水平。在这个项目中,你可以找到对Mybatis核心组件的详细解析,包括SqlSessionFactory、...
MyBatis 是一款著名的持久层框架...通过对 MyBatis-3.5.9 源码的阅读和分析,我们可以深入了解其实现原理,为日常开发和性能优化提供有力支持。同时,这也有助于我们更好地理解和定制 MyBatis,使其更加符合项目需求。
Mybatis 源码分析是理解其内部工作原理的重要途径,这对于优化数据库访问性能、解决实际问题以及定制化开发都有着极大的帮助。 1. **SqlSessionFactoryBuilder**:Mybatis的初始化始于`SqlSessionFactoryBuilder`,...
通过对MyBatis源码的深入分析,我们可以更清晰地理解其实现原理,更好地利用其特性,甚至定制自己的持久层解决方案。在阅读源码的过程中,还可以学习到设计模式、反射、AOP等Java编程技术,提升我们的编程能力。
源码分析则可以帮助理解MP的底层实现,对提升Java开发技能和数据库操作能力非常有帮助。 7. **学习路径** - 首先,熟悉Mybatis的基础知识,理解Mapper、SQL映射和动态SQL的概念。 - 其次,学习Mybatis Plus的基本...
以上是对 MyBatis 源码分析专题第一课中的主要知识点的概述。MyBatis 的优势在于其灵活的映射机制,允许开发者自由地编写 SQL 语句,同时提供了注解方式,使得配置更加简洁。通过深入学习和理解这些知识点,开发者...
五、源码分析 深入研究MyBatis Plus源码可以帮助理解其实现原理,例如如何自动填充字段、如何构造SQL语句等,这对于优化性能和解决实际问题非常有帮助。 六、笔记价值 配套的学习笔记通常会包含作者在学习过程中...
5. **Executor**:执行器,MyBatis的核心组件,它包含SimpleExecutor、ReuseExecutor和BatchExecutor三种实现,分别对应简单执行、复用PreparedStatement和批量操作的场景。 6. **ParameterHandler**:处理输入参数...
【MyBatis 源码分析专题之Mybatis课程--实战篇1】 在Java开发中,MyBatis是一个广泛使用的持久层框架,它简化了数据库操作,提供了灵活的SQL映射和对象关系映射(ORM)。这个专题主要分为几个部分,涵盖了MyBatis的...
源码分析是深入理解框架工作原理的关键,尤其是对于 MyBatis-3 这样的高级框架。在这个 `mybatis-3` 的源码包中,我们可以探索其内部机制,包括 SQL 执行、参数绑定、结果映射等核心功能。 首先,MyBatis 的主要...