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”作为键。
参考:
- https://blog..net/windy2014s/article/details/78738004
- 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/
- https://www.cnblogs.com/baby123/p/11354062.html
下一篇:
Redis高级部分之主从复制