mybatis xml 批量插入如果存在就不插入
在 MyBatis 中,可以使用 insertSelective 方法进行批量插入,同时可以使用 on duplicate key update 语句进行判断是否存在,如果存在则更新对应的值,如果不存在则插入新的值。
例如,假设有一个 User 实体类,包含 id、name 和 age 三个属性,那么可以使用以下方式进行批量插入:
<insert id="insertBatch" parameterType="java.util.List">
insert into user (id, name, age) values
<foreach collection="list" item="item" separator=",">
(#{item.id}, #{item.name}, #{item.age})
</foreach>
on duplicate key update
name = values(name),
age = values(age);
</insert>
其中,list 参数为一个 List<User> 类型的集合,表示需要插入的数据列表。在 SQL 语句中使用了 foreach 标签对集合进行遍历,将每个元素的属性值插入到数据库中。同时,使用了 on duplicate key update 语句,表示如果在插入数据时发生主键冲突,则更新对应的值。
在 Java 代码中,可以通过调用 SqlSession 的 insert 方法来执行上述 SQL 语句:
List<User> userList = new ArrayList<>();
// 添加 User 对象到 userList 中
...
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
int count = sqlSession.insert("insertBatch", userList);
System.out.println("成功插入 " + count + " 条记录");
sqlSession.commit();
} catch (Exception e) {
sqlSession.rollback();
} finally {
sqlSession.close();
}
以上代码中,首先创建了一个 List<User> 类型的集合 userList,并将需要插入的数据对象添加到其中。然后,通过 SqlSession 的 insert 方法执行 SQL 语句,其中第一个参数为 Mapper 文件中的 id 值,第二个参数为需要插入的数据列表。最后,根据返回的插入记录数判断插入操作是否成功,并对事务进行提交或回滚
原文地址: https://www.cveoy.top/t/topic/fhZz 著作权归作者所有。请勿转载和采集!