类 MybatisBatch<T>
java.lang.Object
com.baomidou.mybatisplus.core.batch.MybatisBatch<T>
BatchExecutor.doFlushStatements(boolean)无效输入:'<'/>
引用无效
org.mybatis.spring.transaction.SpringManagedTransaction
JdbcTransaction是可用的
Spring示例:
transactionTemplate.execute(new TransactionCallback无效输入:'<'List>() {
@Override
public List doInTransaction(TransactionStatus status) {
MybatisBatch.Method method = new MybatisBatch.Method无效输入:'<'>(DemoMapper.class);
return new MybatisBatch无效输入:'<'>(sqlSessionFactory,demoList).execute(true, method.insert());
}
});
- 从以下版本开始:
- 3.5.4
- 作者:
- nieqiurong
-
嵌套类概要
嵌套类 -
构造器概要
构造器构造器说明MybatisBatch(org.apache.ibatis.session.SqlSessionFactory sqlSessionFactory, Collection<T> dataList) MybatisBatch(org.apache.ibatis.session.SqlSessionFactory sqlSessionFactory, Collection<T> dataList, int batchSize) -
方法概要
修饰符和类型方法说明List<org.apache.ibatis.executor.BatchResult> execute(boolean autoCommit, BatchMethod<T> batchMethod) 执行批量操作List<org.apache.ibatis.executor.BatchResult> 执行批量操作List<org.apache.ibatis.executor.BatchResult> execute(boolean autoCommit, String statement, ParameterConvert<T> parameterConvert) 执行批量操作List<org.apache.ibatis.executor.BatchResult> execute(BatchMethod<T> batchMethod) 执行批量操作List<org.apache.ibatis.executor.BatchResult> 执行批量操作List<org.apache.ibatis.executor.BatchResult> execute(String statement, ParameterConvert<T> parameterConvert) 执行批量操作List<org.apache.ibatis.executor.BatchResult> saveOrUpdate(boolean autoCommit, BatchMethod<T> insertMethod, BiPredicate<BatchSqlSession, T> insertPredicate, BatchMethod<T> updateMethod) 批量保存或更新 这里需要注意一下,如果在insertPredicate里判断调用其他sqlSession(类似mapper.xxx)时,要注意一级缓存问题或数据感知问题(因为当前会话数据还未提交) 举个例子(事务开启状态下): 如果当前批次里面执行两个主键相同的数据,当调用mapper.selectById时,如果数据库未有这条记录,在同个sqlSession下,由于一级缓存的问题,下次再查就还是null,导致插入主键冲突, 但使用BatchSqlSession时,由于每次select操作都会触发一次flushStatements,就会执行更新操作List<org.apache.ibatis.executor.BatchResult> saveOrUpdate(BatchMethod<T> insertMethod, BiPredicate<BatchSqlSession, T> insertPredicate, BatchMethod<T> updateMethod) 批量保存或更新 这里需要注意一下,如果在insertPredicate里判断调用其他sqlSession(类似mapper.xxx)时,要注意一级缓存问题或数据感知问题(因为当前会话数据还未提交) 举个例子(事务开启状态下): 如果当前批次里面执行两个主键相同的数据,当调用mapper.selectById时,如果数据库未有这条记录,在同个sqlSession下,由于一级缓存的问题,下次再查就还是null,导致插入主键冲突, 但使用BatchSqlSession时,由于每次select操作都会触发一次flushStatements,就会执行更新操作protected ObjecttoParameter(ParameterConvert<T> parameterConvert, T data) 参数转换
-
构造器详细资料
-
MybatisBatch
public MybatisBatch(org.apache.ibatis.session.SqlSessionFactory sqlSessionFactory, Collection<T> dataList) -
MybatisBatch
public MybatisBatch(org.apache.ibatis.session.SqlSessionFactory sqlSessionFactory, Collection<T> dataList, int batchSize)
-
-
方法详细资料
-
execute
执行批量操作- 参数:
statement- 执行的 mapper 方法 (示例: com.baomidou.mybatisplus.core.mapper.BaseMapper.insert )- 返回:
- 批处理结果
-
execute
public List<org.apache.ibatis.executor.BatchResult> execute(String statement, ParameterConvert<T> parameterConvert) 执行批量操作- 参数:
statement- 执行的 mapper 方法 (示例: com.baomidou.mybatisplus.core.mapper.BaseMapper.insert )parameterConvert- 参数转换器- 返回:
- 批处理结果
-
execute
执行批量操作- 参数:
autoCommit- 是否自动提交(这里生效的前提依赖于事务管理器Transaction)statement- 执行的 mapper 方法 (示例: com.baomidou.mybatisplus.core.mapper.BaseMapper.insert )- 返回:
- 批处理结果
-
execute
执行批量操作- 参数:
batchMethod- 批量操作方法- 返回:
- 批处理结果
-
execute
public List<org.apache.ibatis.executor.BatchResult> execute(boolean autoCommit, BatchMethod<T> batchMethod) 执行批量操作- 参数:
autoCommit- 是否自动提交(这里生效的前提依赖于事务管理器Transaction)batchMethod- 批量操作方法- 返回:
- 批处理结果
-
execute
public List<org.apache.ibatis.executor.BatchResult> execute(boolean autoCommit, String statement, ParameterConvert<T> parameterConvert) 执行批量操作- 参数:
autoCommit- 是否自动提交(这里生效的前提依赖于事务管理器Transaction)statement- 执行的 mapper 方法 (示例: com.baomidou.mybatisplus.core.mapper.BaseMapper.insert )parameterConvert- 参数转换器- 返回:
- 批处理结果
-
saveOrUpdate
public List<org.apache.ibatis.executor.BatchResult> saveOrUpdate(BatchMethod<T> insertMethod, BiPredicate<BatchSqlSession, T> insertPredicate, BatchMethod<T> updateMethod) 批量保存或更新 这里需要注意一下,如果在insertPredicate里判断调用其他sqlSession(类似mapper.xxx)时,要注意一级缓存问题或数据感知问题(因为当前会话数据还未提交) 举个例子(事务开启状态下): 如果当前批次里面执行两个主键相同的数据,当调用mapper.selectById时,如果数据库未有这条记录,在同个sqlSession下,由于一级缓存的问题,下次再查就还是null,导致插入主键冲突, 但使用BatchSqlSession时,由于每次select操作都会触发一次flushStatements,就会执行更新操作- 参数:
insertMethod- 插入方法insertPredicate- 插入条件 (当条件满足时执行插入方法,否则执行更新方法)updateMethod- 更新方法- 返回:
- 批处理结果
-
saveOrUpdate
public List<org.apache.ibatis.executor.BatchResult> saveOrUpdate(boolean autoCommit, BatchMethod<T> insertMethod, BiPredicate<BatchSqlSession, T> insertPredicate, BatchMethod<T> updateMethod) 批量保存或更新 这里需要注意一下,如果在insertPredicate里判断调用其他sqlSession(类似mapper.xxx)时,要注意一级缓存问题或数据感知问题(因为当前会话数据还未提交) 举个例子(事务开启状态下): 如果当前批次里面执行两个主键相同的数据,当调用mapper.selectById时,如果数据库未有这条记录,在同个sqlSession下,由于一级缓存的问题,下次再查就还是null,导致插入主键冲突, 但使用BatchSqlSession时,由于每次select操作都会触发一次flushStatements,就会执行更新操作- 参数:
autoCommit- 是否自动提交(这里生效的前提依赖于事务管理器Transaction)insertMethod- 插入方法insertPredicate- 插入条件 (当条件满足时执行插入方法,否则执行更新方法)updateMethod- 更新方法- 返回:
- 批处理结果
-
toParameter
参数转换- 参数:
parameterConvert- 参数转换器data- 参数- 返回:
- 方法参数
-