热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mybatis(6)—实现批量操作allowMultiQueries=true配置

mybatis&&数据库优化&&缓存目录数据准备CREATETABLE`user_t`(`id`bigint(20)NOT

mybatis&&数据库优化&&缓存目录

数据准备

CREATE TABLE `user_t` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `user_name` varchar(10) CHARACTER SET latin1 DEFAULT NULL,
  `password` varchar(10) CHARACTER SET latin1 DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=128 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
@RestController
public class TransactionController {
    @Resource
    private UserTMapper userTMapper;
    private List userTList;
    private List updateList;
    {
        userTList = new ArrayList();
        userTList.add(new UserT("LiBai", "123", 14));
        userTList.add(new UserT("Tom", "124", 13));
        userTList.add(new UserT("Tonny", "12", 11));
        userTList.add(new UserT("Unix", "13", 10));
    }
    {
        updateList = new ArrayList();
        updateList.add(new UserT(128, "Tom_2"));
        //更新这个参数时会发生异常。但是之前操作并不会回滚。
        updateList.add(new UserT(129, "1111111111111111111111111111111adsdsadsadsadas"));
        updateList.add(new UserT(130, "uninx_2"));
    }
    /**
     * 批量插入数据
     *
     * @return
     */
    @RequestMapping("/listUser")
    public List insertUser2() {
        userTMapper.batchSave(userTList);
        return userTList;
    }

    /**
     * 批量更新数据
     *
     * @return
     */
    @RequestMapping("/listUpdate")
    public List updateUser2() {
        userTMapper.batchUpdate(updateList);
        return userTList;
    }
}
public interface UserTMapper {
    void batchSave(@Param(value = "list") List userTList);
    void batchUpdate(@Param(value = "list") List userTList);
}

        insert into user_t (user_name, password,
        age)
        VALUES
        
            (
            #{item.userName,jdbcType=VARCHAR},
            #{item.password,jdbcType=VARCHAR},
            #{item.age,jdbcType=INTEGER}
            )
        
            UPDATE user_t
            SET user_name = #{item.userName}
            WHERE  id= #{item.id}
        

批量插入时,可以构建多个value()。最终与数据库执行时只是一条sql语句。

但是在xml中进行批量更新时,会执行多条sql语句。但mybatis会抛出异常,即不允许多条语句同时执行。

实现批量操作:

在url后面增加allowMultiQueries=true配置。

spring:
  datasource:
    name: mysql_test
    type: com.alibaba.druid.pool.DruidDataSource
    #druid相关配置
    druid:
      url: jdbc:mysql://localhost:3306/test_db?allowMultiQueries=true
#      url: jdbc:mysql://localhost:3306/test_db
      username: root
      password: 123qwe

但是需要注意:该批量操作的sql语句并未在一个commit中,效果等同于代码中使用for循环去更新sql。


推荐阅读
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • 如何在php中将mysql查询结果赋值给变量
    本文介绍了在php中将mysql查询结果赋值给变量的方法,包括从mysql表中查询count(学号)并赋值给一个变量,以及如何将sql中查询单条结果赋值给php页面的一个变量。同时还讨论了php调用mysql查询结果到变量的方法,并提供了示例代码。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
author-avatar
舍舍与你-6
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有