Mybatis的批量插入数据库语句写法

本文详细介绍使用Mybatis进行批量数据库插入的方法。通过定义Mapper方法和XML配置,演示如何将设备关联信息批量添加到数据库中,提高数据处理效率。

Mybatis的批量插入数据库语句写法

我是传入一个集合直接向数据库添加的
下面是mapper方法定义

    /**
     * 一个也务组批量添加设备关联
     * @param list GroupAndDevice集合
     */
    public void addList(List<GroupAndDevice> list);

然后是xml配置,parameterType="java.util.List"设置为集合接收。 #{item.groupId}为集合里面的对象的属性。

  <!--批量添加业务组对应设备-->
  <insert id="addList" parameterType="java.util.List" >
    INSERT INTO group_device(group_id,device_id,area_id) VALUES
    <foreach collection="list" item="item" index="index"
             separator=",">
      (
        #{item.groupId},#{item.deviceId},#{item.areaId}
      )
    </foreach>
  </insert>
### MyBatis 中使用 `foreach` 实现批量插入写法MyBatis 中,`foreach` 是一个非常强大的标签,可以用于循环处理集合数据。以下是一个完整的示例,展示如何使用 `foreach` 标签实现批量插入操作。 #### SQL Mapper 配置 在 MyBatis 的 XML 映射文件中,可以通过 `<insert>` 标签结合 `foreach` 来实现批量插入。以下是具体代码示例: ```xml <insert id="batchInsert" parameterType="java.util.List"> INSERT INTO info_notice (id, title, content, nick_name) VALUES <foreach collection="list" item="item" separator=","> (#{item.id,jdbcType=VARCHAR}, #{item.title,jdbcType=VARCHAR}, #{item.content,jdbcType=VARCHAR}, (SELECT nick_name FROM user_info WHERE user_id = #{item.userId,jdbcType=VARCHAR})) </foreach> </insert> ``` #### 说明 1. 上述代码中,`collection="list"` 表示传入的参数是一个列表,`item="item"` 表示每次循环时的单个元素[^1]。 2. `separator=","` 指定了每个插入语之间的分隔符为逗号,确保生成的 SQL 语法正确[^2]。 3. 在插入的字段中,`nick_name` 是通过子查询从 `user_info` 表中动态获取的,避免了在服务层进行多次查询的操作[^1]。 #### Java 代码调用 在服务层或 DAO 层中,可以通过传递一个包含多个对象的列表来调用上述方法。例如: ```java List<Notice> noticeList = new ArrayList<>(); // 填充 noticeList 数据... noticeMapper.batchInsert(noticeList); ``` #### 注意事项 1. 如果数据库对单条 SQL 的长度有限制,则需要预估 `list` 的大小,并根据实际情况调整批量插入的策略[^3]。 2. 子查询 `(SELECT nick_name FROM user_info WHERE user_id = #{item.userId})` 可能会影响性能,建议在数据量较大时优化查询逻辑或使用缓存机制[^1]。 #### 示例实体类 假设 `Notice` 类定义如下: ```java public class Notice { private String id; private String title; private String content; private String userId; // 对应 user_info 表中的 user_id // Getters and Setters } ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值