首页 > 数据库 >优化循环操作数据库批量处理数据mybatis plus

优化循环操作数据库批量处理数据mybatis plus

时间:2024-07-23 17:28:28浏览次数:18  
标签:users 批量 数据库 session plus user mybatis public pstmt

优化循环操作数据库批量处理数据mybatis plus

大家好我是小星,今天在技术交流群里看见有人在循环中修改数据库,觉得不太好 在此总结几种批量修改数据库的方法

未优化前代码:

for(int i=0;i <pojolist.size();i++){
    Pojo pojo = pojolist.get(i);
    pojo.setAge(1);
    mapper.updateById(pojolist);
}

批量处理方法

  1. 使用mybatis plus批量处理(数据量较小推荐使用)
    for (Pojo pojo : pojolist) {
         application.setIsDeleted(1);
    }
            
    // 执行批量更新
    pojoService.updateBatchById(pojolist);
    
  2. 使用LambdaUpdateWrapper进行批量修改(适合大数据量)
    pojoService.update(Wrappers.lambdaUpdate()
                        .in(Pojo::getIdpojolist)
                        .set(Pojo::setAge, 18));
    
  3. 使用jdbc批量更新
    public class UserBatchUpdate {
    
        private static final String URL = "jdbc:mysql://localhost:3306/yourdatabase";
        private static final String USER = "yourusername";
        private static final String PASSWORD = "yourpassword";
        public void batchUpdateUsers(List<User> users) throws SQLException {
            String sql = "UPDATE users SET name = ?, email = ? WHERE id = ?";
            try (Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
                 PreparedStatement pstmt = conn.prepareStatement(sql)) {
                for (User user : users) {
                    pstmt.setString(1, user.getName());
                    pstmt.setString(2, user.getEmail());
                    pstmt.setInt(3, user.getId());
                    pstmt.addBatch();
                }
                pstmt.executeBatch();
            }
        }
    }
    
  4. 使用Hibernate批量更新
    public class UserBatchUpdate {
    
        private static SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
    
        public void batchUpdateUsers(List<User> users) {
            Session session = sessionFactory.openSession();
            Transaction transaction = session.beginTransaction();
            try {
                int batchSize = 50;
                for (int i = 0; i < users.size(); i++) {
                    User user = users.get(i);
                    session.update(user);
    
                    if (i % batchSize == 0 && i > 0) {
                        session.flush();
                        session.clear();
                    }
                }
                transaction.commit();
            } catch (Exception e) {
                if (transaction != null) {
                    transaction.rollback();
                }
                throw e;
            } finally {
                session.close();
            }
        }
    }
    

标签:users,批量,数据库,session,plus,user,mybatis,public,pstmt
From: https://blog.csdn.net/wanxingahlal/article/details/140641241

相关文章

  • SpringBoot升级到3.3.2版本,JDK升级到17,引入Mybatis-plus后启动报错:Property 'sqlSessi
    【问题描述】2024-07-23T15:16:07.174+08:00WARN2604---[questionnaire][main]ConfigServletWebServerApplicationContext:Exceptionencounteredduringcontextinitialization-cancellingrefreshattempt:org.springframework.beans.factory.UnsatisfiedDependen......
  • [转]从SQLite到Redis:探索C++与多种数据库的交互之道
    转自:【C++风云录】从SQLite到Redis:探索C++与多种数据库的交互之道开启数据库之旅:通过C++与各种数据库交互,事半功倍1.SQLite1.1简介SQLite是一个嵌入式关系型数据库管理系统,提供了一个轻量级的C++接口。它是一个开源的软件库,无需配置服务器或安装管理工具,可以直接在程序中使......
  • Mybatis整合多数据源
    背景 有时候我们需要查询来自多个库表的数据内容,但是又不想起多个服务,可以业务需要这些数据那该怎么办呢?那么其实Mybatis是支持整合多数据源,并随时进行切换。 解决引入依赖 首先引入dynamic-datasource-spring-boot-starter依赖<dependency><groupId>com.baomid......
  • 【YashanDB知识库】yac修改参数后关闭数据库hang住
    【标题】yac修改参数后关闭数据库hang住【问题分类】性能优化【关键词】YashanDB,yac,shutdownhang【问题描述】修改yac参数后执行shutdownimmediate,数据库hang住。【问题原因分析】Shutdown操作时,线程在获取gInstance->trigger->sema信号量时卡住。该信号量应由mai......
  • 每次测试后自动清理 postgres 数据库
    我有与postgres数据库对话的sqlalchemy应用程序。我想使用测试容器进行一些“集成测试”并尝试各种场景。只是为了让事情变得简单,假设在我的应用程序中我只期望一个表users至少包含admin行。我希望这在所有测试中可用。这就像我的数据库状态......
  • MySQL 数据库的设计规范
    Author:ACatSmilingSince:2024-07-23为什么需要数据库设计我们在设计数据表的时候,要考虑很多问题。比如:用户都需要什么数据?需要在数据表中保存哪些数据?如何保证数据表中数据的正确性?当插入、删除、更新的时候该进行怎样的约束检查?如何降低数据表的数据冗余度,保证数据表不......
  • 迁移apollo数据库之后部署apollo
    version:'3'services:apollo-configservice:image:apolloconfig/apollo-configservice:2.2.0container_name:apollo-configservicerestart:alwaysnetwork_mode:hostenvironment:-SPRING_DATASOURCE_URL=jdbc:mysql://xxx......
  • 易优cms数据库执行中途失败,请第一时间请求技术支持,否则将影响后续的版本升级!
    应该是太早的版本升级到最新版本的缘故。可以看了下这篇文章《易优系统升级数据库执行中途失败解决办法》问题分析:有一些用户在升级的过程中遇到升级中断的问题  导致这个问题的出现有几种可能性:第一种是由于以往升级的过程中数据表丢失,从而影响升级。第二种是人为改动或二开......
  • 智能停车场系统--前后端分离(可直接落地)使用数据:vue,springBoot,redis,mybatis,mysql等
    系统首页-统计停车车收费收费数据展示实现代码:对菜单控制代码@AutowiredprivateMenuServicemenuService;@AutowiredprivateRoleMenuServiceroleMenuService;@GetMapping("/list")publicResultlist(){List<MenuRoleVO>menuRoleList=this.menuServi......
  • mybatis-plus对表的查询方式
    publicPage<WmsInventoryVO>queryPage(WmsInventoryQueryquery,Pageablepage){List<WmsInventory>list=selectList(query,page);List<WmsInventoryVO>res=inventoryConvert.dos2vos(list);injectAreaAndItemInfo(r......