mybatis批量插入和更新list到数据库

功能实现mybatis批量插入数据,已有的则更新。

有一个对象如下:

public class RItemBean {
    /**
     * 主键
     * */
    private String id;
    
    /**
     * 租房信息表ID,外键
     * */
    private String rentalInfoId;
    
    /**
     * 物品名称
     * */
    private String itemName;
    
    /**
     * 数量
     * */
    private Integer number;
    
    /**
     * 备注
     * */
    private String remark;
    
    ......set get
}

mysql中在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE时,向数据库中插入一条记录,

若插入数据的主键值/ UNIQUE KEY 已经在表中存在,则执行更新操作(UPDATE 后面的操作),否则插入一条新的记录

格式:

INSERT tbl_name [(col_name,...)]
    VALUES (expr,...),(...),...
    ON DUPLICATE KEY UPDATE
      col_name=expr
        [, col_name=expr] ...

xxxMapper.java

void batchAddAssets(@Param("list") List<ApiAssets> list);

现将多个该对象封装到一个list集合中,添加到数据库中,在mybatis中就是mapper.xml中的配置:

<!-- 插入物品信息 -->
<insert id="batchAddAssets" parameterType="java.util.List">
    insert into lzf_rental_item_detailsl
    (   
        id,
        rental_info_id,
        item_name,
        number,
        remark
    )
    values
    <foreach collection="list" item="item" index= "index" separator =",">
    (
        #{item.id},
        #{item.rentalInfoId},
        #{item.itemName},
        #{item.number},
        #{item.remark}
    )
    </foreach>
	on duplicate key UPDATE number=values(number), rental_info_id=values(rental_info_id) <!-- 至少更新一项 -->
</insert>

foreach说明

主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。

    foreach元素的属性主要有 item,index,collection,open,separator,close。 item表示集合中每一个元素进行迭代时的别名 index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置 open表示该语句以什么开始 separator表示在每次进行迭代之间以什么符号作为分隔 符 close表示以什么结束 collection属性,是必须指定的,但是在不同情况 下,该属性的值是不一样的,主要有:   如果传入的是单参数且参数类型是一个List的时候,collection属性值为list   如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array   如果传入的参数是多个,就需要把它们封装成一个Map

ameterType说明  

    基本数据类型:

  包含int,String,Date等。作为传参,只能传入一个。通过#{参数名} 即可获取传入的值

    复杂的数据类型:

  包含JAVA实体类、Map。通过#{属性名}或#{map的KeyName}即可获取传入的值

注:

      可以传递一个List实例或者数组作为参数对象传给MyBatis。这时,MyBatis会自动将它包装在一个Map中,用名称在作为键。List实例将会以“list”作为键,而数组实例将会以“array”作为键。

参考:

  1. https://blog..net/windy2014s/article/details/78738004
  2. https://xiaoyue26.github.io/2015/10/19/mybatis%E6%89%B9%E9%87%8F%E6%8F%92%E5%85%A5%E5%92%8C%E6%9B%B4%E6%96%B0/
  3. https://www.cnblogs.com/baby123/p/11354062.html
经验分享 程序员 微信小程序 职场和发展