文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

springboot怎么整合mybatis实现数据库的更新批处理

2023-07-05 11:06

关注

本文小编为大家详细介绍“springboot怎么整合mybatis实现数据库的更新批处理”,内容详细,步骤清晰,细节处理妥当,希望这篇“springboot怎么整合mybatis实现数据库的更新批处理”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

springboot整合mybatis实现数据库更新批处理

在mapper接口中编写方法

Integer batchBookCountStork(@Param("bookList") List<CartItem> bookList);

在mapper.xml中编写对相应的更新sql语句

<update id="batchBookCountStork" parameterType="java.util.List">    UPDATE t_book    <set>        <foreach collection="bookList" item="book" index="index" open="`sales` = CASE `book_id`" close="END,">            WHEN #{book.bookId} THEN sales+#{book.count}        </foreach>        <foreach collection="bookList" item="book" index="index" open="`stock` = CASE `book_id`" close="END,">            WHEN #{book.bookId} THEN stock-#{book.count}        </foreach>    </set>    <where>        <foreach collection="bookList" item="book" index="index" open="`book_id` IN(" close=")" separator=",">            #{book.bookId}        </foreach>    </where>  </update>

这个配置文件的sql语句流程如下:

update t_book(表名)set sales(这个是数据库的销量字段名) = case book_id(这个是数据库的id字段名)    when bookid(从list集合中取出来的) then sales+(从集合中取出的数据)    ...(这里可以一直进行拼接)  end,    stock(这个是数据库的库存字段名) = CASE book_id(这个是数据库的id字段名)    when bookid(从list集合中取出来的) then stock-(从集合中取出数据)    ...(这里可以一直进行拼接)  end,where `book_id`(这个是数据库的id字段名) IN(bookid(从list集合中取出来),bookid(从list集合中取出来)...)

这个sql语句的含义:

更新表里面的数据根据集合遍历出来的id值,设置要更新的字段名,让要更新的字段值跟这个表的主键id进行绑定,当这个主键id与list中取出来的id值一致时就让这个要更新的字段名,取then后面的值

Mybatis批量更新数据库 MybatisBatchUtils batchInsertupdate spring boot

MybatisBatchUtils

    int cnt = mybatisBatchUtils.batchUpdateOrInsert(addList, UiConfigDetailMapper.class,                            (item, uiConfigDetailMapper) -> uiConfigDetailMapper.insertSelective(item));
package cn.XXX.dao.serivce.common;import com.XXX.doctorusercenter.exception.BusinessException;import lombok.extern.slf4j.Slf4j;import org.apache.ibatis.session.ExecutorType;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.springframework.stereotype.Component;import javax.annotation.Resource;import java.util.List;import java.util.function.BiFunction;@Slf4j@Componentpublic class MybatisBatchUtils {        private static final int BATCH_SIZE = 1000;    @Resource    private SqlSessionFactory sqlSessionFactory;        public <T, U, R> int batchUpdateOrInsert(List<T> data, Class<U> mapperClass, BiFunction<T, U, R> function)  {        int i = 1;        SqlSession batchSqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH);        try {            U mapper = batchSqlSession.getMapper(mapperClass);            int size = data.size();            for (T element : data) {              function.apply(element, mapper);                if ((i % BATCH_SIZE == 0) || i == size) {                    batchSqlSession.flushStatements();                }                i++;            }            // 非事务环境下强制commit,事务情况下该commit相当于无效            batchSqlSession.commit(true);        } catch (Exception e) {            batchSqlSession.rollback();            // throw new BusinessException(e.getMessage());            log.error("batchUpdateOrInsert", e);        } finally {            batchSqlSession.close();        }        return i - 1;    }}

读到这里,这篇“springboot怎么整合mybatis实现数据库的更新批处理”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯