Mybatis 中传入List实现 批量插入、批量更新、批量删除

这篇具有很好参考价值的文章主要介绍了Mybatis 中传入List实现 批量插入、批量更新、批量删除。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

个人收藏使用

文章来自Mybatis 中传入List实现 批量插入、批量更新、批量删除 - chelsey3tsf - 博客园 (cnblogs.com)

1. 批量插入:

Mapper层:

int insertList(List<UsersModel> list);

对应的mapper.xml:

Mybatis 中传入List实现 批量插入、批量更新、批量删除

<!--批量插入信息-->
  <insert id="insertList" parameterType="java.util.List">
    insert into users(
    id, name
    )
    values
    <foreach collection="list" item="item" index="index" separator=",">
      (
      #{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}
      )
    </foreach>
  </insert>

Mybatis 中传入List实现 批量插入、批量更新、批量删除

如果List数据量比较大,可以考虑将List分批次插入

2. 批量更新:

批量更新只提供更新单个字段的,因为更新多个字段无论哪种批量更新方案,我都用起来很不舒服,所以不做提供。

Mapper层:

int updateList(List<AgentApply> list);

对应的mapper.xml:

Mybatis 中传入List实现 批量插入、批量更新、批量删除

<!--批量更新-->
  <update id="updateList" parameterType="java.util.List">
    update agent_apply
    set apply_time=
    <foreach collection="list" item="item" index="index"
             separator=" " open="case" close="end">
      when id=#{item.id} then #{item.applyTime}
    </foreach>
    where id in
    <foreach collection="list" index="index" item="item"
             separator="," open="(" close=")">
      #{item.id,jdbcType=INTEGER}
    </foreach>
  </update>

Mybatis 中传入List实现 批量插入、批量更新、批量删除

3. 批量删除:

PS:一般查询出来的List都是包含对象在里面的,那么怎么清理出单独包含ID的list呢?

可以参考下面方式,第一个listData是从数据库查询出来的list数据,每个元素都是一个对象;

然后单独把里面每个元素的id给取出来放入新的list(ids)。

List<AgentRechargeOrder> listData = agentRechargeOrderServiceImpl.getListByXXXX(XXXX);
List<Integer> ids = listData.stream().map(AgentRechargeOrder::getId).collect(Collectors.toList());

如果不想清除出单独的id的list,直接传整个List也是可以的, 这样mapper层传值就改成对应的包含对象的List即可。

Mapper层:

int deleteMany(List<Integer> ids);

对应的mapper.xml:

<delete id="deleteMany">
        delete  from agent_recharge_order where id in
        <foreach collection="list" item="item" open="(" separator="," close=")">
            #{item}
        </foreach>
    </delete>

最后补充个提醒:

因为批量操作会拼接成很长很长的mysql语句,所以mysql server在接收数据包的时候,对这个数据包的大小是有设置项限制的。

如果超过设置的值,就会报错:

Caused by: com.mysql.jdbc.PacketTooBigException: Packet for query is too large

那么就需要修改这个设置项,所以推荐提前先把对应的设置值稍微弄大一点文章来源地址https://www.toymoban.com/news/detail-512852.html

到了这里,关于Mybatis 中传入List实现 批量插入、批量更新、批量删除的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 批量插入或更新数据(MyBatis-plus框架)

    目录 1.场景说明 2.DUPLICATE 和REPLACE比较 3.批量插入或者更新(两种方式) 方式一:mybatis-plus的saveOrUpdateBatch方法 问题:如果操作类集成了基础类,比如封装了BaseEntity去集成,那么这样使用会出问题 方式二:on duplicate key (推荐) 4.注意 5.常见问题  插入数据时,我们经常会遇到这

    2024年02月04日
    浏览(67)
  • 【mybatis】mapper.xml中foreach的用法,含批量查询、插入、修改、删除方法的使用

    一、xml文件中foreach的主要属性 foreach元素的属性主要有 collection,item,index,separator,open,close。 collection: 表示集合,数据源 item :表示集合中的每一个元素 index :用于表示在迭代过程中,每次迭代到的位置 separator :表示在迭代时数据以什么符号作为分隔符 open :表示该语

    2024年02月12日
    浏览(34)
  • 使用saveOrUpdateBatch实现批量插入更新数据

    saveOrUpdateBatch 是 Hibernate 中的一个方法,可以用来批量插入或更新数据。这个方法的参数是一个 List,里面可以存储多个实体对象。当 Hibernate 执行这个方法时,会检查每个实体对象是否存在主键,如果存在主键就执行 update 操作,否则执行 insert 操作。 使用 saveOrUpdateBatch 的代

    2024年02月11日
    浏览(38)
  • mybatis实现批量删除

    批量删除主要需要注意接口处需要写上@Param()加上你自己定义的collection集合名称。实现批量删除主要分为 三步骤 批量删除是一个数组,因此传入的参数是一个数组。但是之后使用的foreach标签里面的需要id识别,因此需要自己给这个数组加上一个名称。 主要就是foreach中的

    2024年02月16日
    浏览(38)
  • STL--list如何实现元素的插入和删除

    在C++标准模板库(STL)中,std::list 是一个双向链表。由于它的双向链表特性,std::list 支持在任何位置高效地插入和删除元素。 元素插入: ●使用 push_back() 在列表尾部添加元素; ●使用 push_front() 在列表头部添加元素; ●使用 insert() 在指定位置插入元素。这需要一个迭代器

    2024年04月12日
    浏览(27)
  • Mybatis实现批量删除(两种常用方法)

            将任意多个 id 拼接成 字符串 ,以 参数 形式传递进去,通过 in 函数  的方式来删除          ①首先定义 接口类         ②在 实现类 中配置Mapper.xml         ③ 测试类         ④ 结果          注意:  #{}中 字符串类型 会使用单引号,${} 则无需。 这里

    2024年02月17日
    浏览(29)
  • Mysql 实现批量插入对已存在数据忽略或更新

    对已存在的数据进行 忽略/更新 ,需要唯一索引/主键。 唯一索引可为多个字段的联合索引,比如根据我提供的sql中,我需要``name + age`不重复,则可把这2个字段联合创建为唯一索引 创建联合唯一索引的sql 批量插入对已存在数据忽略 批量插入对已存在数据更新 笔者这里只举

    2024年02月15日
    浏览(32)
  • Mybatis-Plus的SQL注入器实现批量插入/修改,效率比较

    mysql支持一条sql语句插入多条数据。但是Mybatis-Plus中默认提供的saveBatch、updateBatchById方法并不能算是真正的批量语句,而是遍历实体集合执行INSERT_ONE、UPDATE_BY_ID语句。 mybatis-plus虽然做了分批请求、一次提交的处理。但如果jdbc不启用配置rewriteBatchedStatements,那么批量提交的s

    2024年02月11日
    浏览(37)
  • 【c++】:list模拟实现“任意位置插入删除我最强ƪ(˘⌣˘)ʃ“

        文章目录 前言 一.list的基本功能的使用 二.list的模拟实现 总结   1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。 2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指

    2024年01月17日
    浏览(32)
  • JAVA实现存在更新不存在插入与及多余的进行删除(三)

    这个版本,主要是迭代重载了下save方法,不废话,直接上代码: 具体实现类对应的重载方法如下: 然后就是头部加多了 implements ICudDataServiceT, ApplicationContextAware。 通过这个ApplicationContextAware获取到所有bean服务,肤浅地以实体类拼凑一下服务名,找到bean服务就作为这个调用的

    2024年02月13日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包