前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mybatis插入/删除批处理

Mybatis插入/删除批处理

作者头像
Tyan
发布2022-05-09 08:45:21
6900
发布2022-05-09 08:45:21
举报
文章被收录于专栏:SnailTyan

文章作者:Tyan 博客:noahsnail.com  |  CSDN  |  简书

在操作数据库时,经常会碰到批量插入、批量删除的情况,直接执行SQL语句还好做一点,当使用Mybatis进行批量插入、批量删除时会有一些问题。下面对使用Mybatis批量插入,批量删除进行介绍。

1. 批量插入

  • Java代码:
代码语言:javascript
复制
// Model: Test.java

@Data
public class Test {
    private String x;
    private String y;
    private String z;
}

// Mapper: TestMapper.java
public void insertTestList(List<Test> testList);
  • XML代码
代码语言:javascript
复制
<!-- XML: TestMapper.XML -->

...

<!-- 忽略重复数据 -->
<insert id="insertTestList" parameterType="Test">
    INSERT IGNORE INTO 
        test_table(test_x, test_y, test_z)
    VALUES
    <foreach item="item" index="index" collection="list" open="(" close=")" separator=",">
        #{item}.x, #{item.y}, #{item}.z
    </foreach>
</insert>

<!-- 更新重复数据 -->
<insert id="insertTestList" parameterType="Test">
    INSERT INTO 
        test_table(test_x, test_y, test_z)
    VALUES
    <foreach item="item" index="index" collection="list" open="(" close=")" separator=",">
        #{item}.x, #{item.y}, #{item}.z
    </foreach>
    ON DUPLICATE KEY UPDATE
        test_x = VALUES(test_x),
        test_y = VALUES(test_y),
        test_z = VALUES(test_z)
</insert>

...
  • 批量插入SQL语句
代码语言:javascript
复制
insert into test_table(x, y, z) values (1, 1, 1), (2, 2, 2), (3, 3, 3)

**备注:**VALUE()是Mysql的一个函数,具体解释可以查看文档function_values

主要功能就是在数据重复时可以获取要更新的值。

2. 批量删除

  • Java代码:
代码语言:javascript
复制
// Model: Test.java

@Data
public class Test {
    private String x;
    private String y;
    private String z;
}

// Mapper: TestMapper.java
public void deleteTestList(List<Test> testList);
  • XML代码
代码语言:javascript
复制
<!-- XML: TestMapper.XML -->

...

<delete id="deleteTestList" parameterType="Test">
    DELETE FROM 
        test_table
    WHERE
    <foreach item="item" index="index" collection="list" open="(" close=")" separator="OR">
        test_x = #{item.x} AND test_y = #{item.y} AND test_z = #{item.z}
    </foreach>
</delete>

...
  • SQL语句
代码语言:javascript
复制
delete from test_table where (test_x = 1 AND test_y = 1 AND test_z = 1) or (test_x = 2 AND test_y = 2 AND test_z = 2) or (test_x = 3 AND test_y = 3 AND test_z = 3)

备注:上面的代码为x,y,z为联合主键的情况,普通情况使用where id in

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-11-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 批量插入
  • 2. 批量删除
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档