mybatis 批量插入

本文介绍了一个使用MyBatis进行批量插入操作的例子。通过<insert id=insertBatch>标签定义SQL语句,并利用<foreach>标签遍历对象集合,实现了一次性插入多条记录的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mybatis 批量插入


<insert id="insertBatch">
    INSERT INTO t_user
            (id, name, del_flag)
    VALUES
    <foreach collection ="list" item="user" separator =",">
         (#{user.id}, #{user.name}, #{user.delFlag})
    </foreach >
</insert>

### MyBatis 批量插入的实现方式及示例代码 在 MyBatis批量插入数据可以通过多种方式实现,以下为常见的几种方法及其示例代码。 #### 方法 1:使用 `<foreach>` 标签进行批量插入 通过 `<foreach>` 标签可以在 SQL 映射文件中直接实现批量插入。以下是具体的实现步骤和代码示例: **Mapper 接口定义** ```java public interface BatchInsertMapper { int batchInsertProductCategory(List<ProductCategory> productCategoryList); } ``` **XML 文件配置** ```xml <insert id="batchInsertProductCategory" parameterType="java.util.List"> INSERT INTO tb_product_category(product_category_name, priority, shop_id) VALUES <foreach collection="list" item="productCategory" index="index" separator=","> (#{productCategory.productCategoryName}, #{productCategory.priority}, #{productCategory.shopId}) </foreach> </insert> ``` 上述代码中,`<foreach>` 标签用于遍历传入的列表参数,并将每个元素映射到 SQL 的 `VALUES` 部分[^3]。 #### 方法 2:使用 ExecutorType.BATCH 批量执行 通过设置 `SqlSession` 的执行器类型为 `ExecutorType.BATCH`,可以显著提高大批量数据插入的性能。以下是具体实现代码: **Java 应用层代码** ```java public long mybatisBatchInsert(int amount) { SqlSession session = sqlSessionFactory.openSession(ExecutorType.BATCH, false); long beginTime = System.currentTimeMillis(); try { BatchInsertMapper insertMapper = session.getMapper(BatchInsertMapper.class); List<BatchData> dataList = buildDataList(amount); for (BatchData data : dataList) { insertMapper.insertData(data); } session.commit(); session.clearCache(); } catch (Exception e) { session.rollback(); } finally { session.close(); } return System.currentTimeMillis() - beginTime; } ``` 在此代码中,`ExecutorType.BATCH` 模式允许 MyBatis 在一次会话中累积多个插入操作,最终通过 `session.commit()` 提交所有更改[^2]。 #### 方法 3:自定义批量插入逻辑 如果需要更高的灵活性,可以结合 JDBC 的批量处理机制与 MyBatis 的映射功能。以下是一个简单的示例: **Mapper 接口定义** ```java public interface CustomBatchInsertMapper { void batchInsert(@Param("dataList") List<CustomData> dataList); } ``` **XML 文件配置** ```xml <insert id="batchInsert"> INSERT INTO custom_table(field1, field2) VALUES <foreach collection="dataList" item="item" separator=","> (#{item.field1}, #{item.field2}) </foreach> </insert> ``` **Java 调用代码** ```java public void customBatchInsert(List<CustomData> dataList) { SqlSession session = sqlSessionFactory.openSession(ExecutorType.BATCH, false); try { CustomBatchInsertMapper mapper = session.getMapper(CustomBatchInsertMapper.class); mapper.batchInsert(dataList); session.commit(); } catch (Exception e) { session.rollback(); } finally { session.close(); } } ``` 以上三种方法均可根据实际需求选择使用,其中 `<foreach>` 标签适用于简单的批量插入场景,而 `ExecutorType.BATCH` 更适合大规模数据插入任务。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hero_孙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值