mybatis插入多条数据,若数据库中存在则更新,若无则插入

原文链接:https://blog.csdn.net/anqinganjie/article/details/84803113

mybatis插入多条数据,若数据库中存在则更新,若无则插入,具体实例如下:

其中pro_id,day_date为唯一索引

insert into pro(
pro_id,
day_date,
price,
remark
) values
<foreach item="item" index="index" collection="list"
separator=",">
(
#{item.proId,jdbcType=NUMERIC} ,
str_to_date( #{item.dayDate,jdbcType=DATE} , '%Y-%m-%d %h:%i:%s') ,
#{item.price,jdbcType=DECIMAL} ,
#{item.remark,jdbcType=VARCHAR}
)
</foreach>
ON DUPLICATE KEY UPDATE
price = VALUES(price),
remark = VALUES(remark)

转载于:https://www.cnblogs.com/Hizy/p/11602901.html

在使用 MyBatis 插入多条数据时,有两种常见的方式: 1. 使用 `foreach` 标签 使用 `foreach` 标签可以将多条数据一次性插入数据库。在 `foreach` 标签,可以使用 `${}` 或者 `#{}` 占位符来获取集合数据。以下是一个示例: ```xml <insert id="batchInsert" parameterType="java.util.List"> insert into user (name, age) values <foreach collection="list" item="item" separator=","> (#{item.name}, #{item.age}) </foreach> </insert> ``` 在 Java 代码,你可以将多条数据封装到一个 `List` ,然后调用 `batchInsert` 方法插入数据: ```java List<User> userList = new ArrayList<>(); userList.add(new User("张三", 18)); userList.add(new User("李四", 20)); userMapper.batchInsert(userList); ``` 2. 使用 `insert into table select` 语句 另一种方式是使用 `insert into table select` 语句。首先,你需要创建一个临时表,然后将多条数据插入到临时表,最后再将临时表数据插入到目标表。以下是一个示例: ```xml <insert id="batchInsert" parameterType="java.util.List"> create temporary table temp_user (name varchar(20), age int); <foreach collection="list" item="item"> insert into temp_user (name, age) values (#{item.name}, #{item.age}); </foreach> insert into user (name, age) select name, age from temp_user; drop temporary table if exists temp_user; </insert> ``` 在 Java 代码,你可以将多条数据封装到一个 `List` ,然后调用 `batchInsert` 方法插入数据: ```java List<User> userList = new ArrayList<>(); userList.add(new User("张三", 18)); userList.add(new User("李四", 20)); userMapper.batchInsert(userList); ``` 以上两种方式都可以批量插入多条数据,你可以根据实际情况选择合适的方式。需要注意的是,在使用 `foreach` 标签插入数据时,需要注意 SQL 注入问题,建议使用 `#{}` 占位符来获取集合数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值