当前位置:

首页 > 数据库 > 编程开发 > springboot怎么整合mybatis实现数据库的更新批处理

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

springboot整合mybatis实现数据库更新批处理1.在mapper接口中编写方法/***修改book表中的销量和库存*要使用批处理*/IntegerbatchBookCountStork(@Param("bookList")ListbookList);2.在mapper.xml中编写对相应的更新sql语句UPDATEt_bookWHEN#{book.bookId}THENsales+#{book.count}WHEN#{book.bookId}THENstock-#{book.count}#{b

本文目录

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

      1.在mapper接口中编写方法

      /**
       * 修改book表中的销量和库存
       * 要使用批处理
       */
      Integer batchBookCountStork(@Param("bookList") List bookList);

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

      
          UPDATE t_book
          
              
                  WHEN #{book.bookId} THEN sales+#{book.count}
              
              
                  WHEN #{book.bookId} THEN stock-#{book.count}
              
          
          
              
                  #{book.bookId}
              
          
        

      3.这个配置文件的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集合中取出来)...)

      4.这个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
      @Component
      public class MybatisBatchUtils {
      
          /**
           * 每次处理1000条
           */
          private static final int BATCH_SIZE = 1000;
      
          @Resource
          private SqlSessionFactory sqlSessionFactory;
      
          /**
           * 批量处理修改或者插入
           *
           * @param data        需要被处理的数据
           * @param mapperClass Mybatis的Mapper类
           * @param function    自定义处理逻辑
           * @return int 影响的总行数
           */
          public  int batchUpdateOrInsert(List data, Class mapperClass, BiFunction 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;
          }
      }
      本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
      作者最新文章
      数据库 编程开发
      相关文章 更多
      MyBatis XML开发全面完整指南
      MyBatis XML开发全面完整指南

      MyBatisXML开发方式适合复杂SQL逻辑,通过配置数据库连接与mapper路径,在接口和XML映射文件中实现增删改查操作。XML支持多表查询及结果映射,#{}使用预编译防注入,${}直接拼接需注意字符串引号。

      MyBatis Mapper 接口原理与实现解析
      MyBatis Mapper 接口原理与实现解析

      MyBatis通过动态代理自动生成Mapper接口实现类,运行时将接口方法绑定到SQL语句,结合XML映射文件中的SQL与参数配置,由SqlSession执行并返回结果,避免了手动编写实现类的繁琐过程。

      MyBatis框架常见问题及解决方案
      MyBatis框架常见问题及解决方案

      MyBatis常见问题包含:1.实体类属性与数据库字段不一致,解决方案为使用@Column注解映射;2.执行更新操作失败,需要配置update元素并检查SQL语句;3.查询结果映射出错,需检查resultMap配置是否正确;4.解析SQL参数失败,要使用#{}占位符并确保参数类型匹配。

      MyBatis框架中设计模式的应用
      MyBatis框架中设计模式的应用

      MyBatis框架广泛应用设计模式,包括:工厂模式:创建SqlSessionFactory对象,管理数据库连接和查询;代理模式:实现延迟加载和懒加载,提高性能。外观模式:封装对数据库访问,简化代码维护。其中,一对多关系映射可以通过User和Order类、Mapper接口和MapperXML配置实现,使用延迟加载和嵌套resultMap优化性能。

      MyBatis 的动态 SQL 解析:原理、实现和优化
      MyBatis 的动态 SQL 解析:原理、实现和优化

      MyBatis动态SQL解析:原理:使用TAG和OGNL表达式动态构建SQL语句。实现:通过SqlNode、SqlSource和ParameterHandler接口实现。优化:避免不必要的动态SQL、优化OGNL表达式、使用PreparedStatement缓存和配置查询超时。

      springBoot项目常用目录有哪些
      springBoot项目常用目录有哪些

      springBoot项目常用目录springBoot项目的目录结构及名规范介绍基于SpringBoot开发时的目录结构及命名规范,通过介绍能够为你解决,在实际项目中如何规划目录结构?如何命名目录更规范?各个目录分别代表什么含义?等三个问题。目录说明servicex//项目名|-admin-ui//管理服务前端代码(一般将UI和SERVICE放到一个工程中,便于管理)|-servicex-auth//模块1|-servicex-common//模块2|-servicex-gateway//模块3|-serv

      正确使用MyBatis中的小于符号
      正确使用MyBatis中的小于符号

      MyBatis是一个用Java语言编写的持久层框架,广泛用于数据库操作。在MyBatis中,使用小于号(<)进行条件查询是很常见的操作。但是,小于号在MyBatis中有一些使用注意事项,本文将介绍MyBatis小于号的正确使用方法,并提供具体的代码示例。1.在MyBatis中使用小于号的基本方法在MyBatis中使用小于号进行条件查询,一般是在SQL

      解析MyBatis的缓存机制:比较一级缓存和二级缓存的使用场景
      解析MyBatis的缓存机制:比较一级缓存和二级缓存的使用场景

      MyBatis的缓存机制解析:一级缓存与二级缓存的区别与应用在MyBatis框架中,缓存是一个非常重要的特性,可以有效提升数据库操作的性能。其中,一级缓存和二级缓存是MyBatis中常用的两种缓存机制。本文将详细解析一级缓存与二级缓存的区别与应用,并提供具体的代码示例进行说明。一、一级缓存一级缓存也被称为本地缓存,它默认开启且不可关闭。一级缓存是SqlSes

      深入了解MyBatis缓存机制:揭秘缓存存储原理
      深入了解MyBatis缓存机制:揭秘缓存存储原理

      MyBatis缓存机制详解:一文读懂缓存存储原理引言在使用MyBatis进行数据库访问时,缓存是一个非常重要的机制,能够有效减少对数据库的访问,提高系统性能。本文将详细介绍MyBatis的缓存机制,包括缓存的分类、存储原理和具体的代码示例。一、缓存的分类MyBatis的缓存主要分为一级缓存和二级缓存两种。一级缓存一级缓存是SqlSession级别的缓存,当在

      详解在MyBatis中使用小于符号的方法
      详解在MyBatis中使用小于符号的方法

      MyBatis中小于号的写法详解MyBatis是一个优秀的持久层框架,广泛应用于Java开发中。在使用MyBatis进行数据库操作的过程中,我们经常会用到小于号(<)进行条件查询。但是,MyBatis中小于号的写法并不像普通的SQL语句那样直接使用小于号符号,而是需要使用特定的方式来实现。本文将详细解释MyBatis中小于号的写法,并提供具体的代码示例

      查看更多
      精品专题 更多
      装机必备
      装机必备

      正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

      Windows
      Windows

      正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

      PDF教程
      PDF教程

      正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

      Mac软件 更多
      讯飞智作 网页版
      讯飞智作 网页版
      Windows/ macOS/ Linux

      讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

      火山引擎 网页版
      火山引擎 网页版
      Windows/ macOS/ Linux

      火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

      Aperty macOS版
      Aperty macOS版
      macOS

      Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

      WINDOWS 更多
      讯飞智作 网页版
      讯飞智作 网页版
      Windows/ macOS/ Linux

      讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

      火山引擎 网页版
      火山引擎 网页版
      Windows/ macOS/ Linux

      火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

      PixTV 网页版
      PixTV 网页版
      Windows

      PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。