MyBatis的批量插入有多种写法,下面我将列出一些常见的批量插入写法
标签,并通过foreach
标签迭代批量数据,然后在SQL语句中使用VALUES
关键字。@Insert
注解,并通过@Param
注解传入批量数据的参数。List
类型的参数,通过SqlSession.insert()
方法进行批量插入。@LambdaUpdate
注解,并通过Lambda表达式定义批量插入的SQL语句。@UpdateProvider
注解,并指定一个自定义的UpdateProvider
类,该类通过反射生成批量插入的SQL语句。PreparedStatement
的addBatch
和executeBatch
方法,将多个插入操作添加到批处理队列中,然后一次性执行所有操作。BatchExecutor
类,通过指定SQL语句和参数列表,执行批量插入操作。@AutoBatchInsert
注解,并使用BatchInsert
类提供的静态方法进行批量插入操作。ExecutorType.BATCH
类型的执行器,通过SqlSessionFactory.getSqlSession()
方法获取批量执行的SqlSession,然后使用SqlSession.insert()
方法进行批量插入操作。BaseMapper
接口的insertList()
方法,通过传入批量插入的数据列表进行操作。
INSERT INTO table_name (column1, column2, ...)
VALUES
(#{item.column1}, #{item.column2}, ...)
@LambdaUpdate({
@QuerySql("INSERT INTO table_name (column1, column2, ...) VALUES ",
"#{list,jdbcType=VARCHAR},#{list2,jdbcType=INTEGER}")
})
void insertBatch(List list);
servicce.saveBatch(List,size)//size默认1000
@UpdateProvider(sql = "INSERT INTO table_name (column1, column2, ...) VALUES ",provider = BatchEntityProvider.class)
void insertBatch(List list);
public class BatchEntityProvider extends AbstractEntityProvider {
public BatchEntityProvider() {
super(Entity.class);
}
@Override
public String createSql(Entity model, String sql, LambdaSqlContext ctx) {
StringBuilder sqlBuilder = new StringBuilder(sql);
List
本文由mdnice多平台发布