我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MyBatis的批量查询方法有哪些

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MyBatis的批量查询方法有哪些

这篇文章主要介绍了MyBatis的批量查询方法有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MyBatis的批量查询方法有哪些文章都会有所收获,下面我们一起来看看吧。

一.直接循环插入

@RestController@RequestMapping("/mybatis3/user")@RequiredArgsConstructorpublic class UserController {    private final IUserService iUserService;    @GetMapping("/one")    public Long one(){       return iUserService.add();    }}  Long add();@Service@RequiredArgsConstructorpublic class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {    private final UserMapper userMapper;    @Override    public Long add() {        long start = System.currentTimeMillis();        for (int i = 0; i < 10000; i++) {            User user = new User();            user.setUsername("name"+i);            user.setPassword("password"+i);            userMapper.insertUsers(user);        }        long end = System.currentTimeMillis();        System.out.println("耗时:"+( end - start ) + "ms");        return (end-start);    }    } Integer insertUsers(User user); <insert id="insertUsers" >        insert into user(username,password)        values (#{username}, #{password})    </insert>

最终耗时:14s多

MyBatis的批量查询方法有哪些

二.关闭MySql自动提交,手动进行循环插入提交

@RestController@RequestMapping("/mybatis3/user")@RequiredArgsConstructorpublic class UserController {    private final IUserService iUserService;        @GetMapping("/one")    public Long one(){       return iUserService.add();    }} Long add2();@Service@RequiredArgsConstructorpublic class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {    private final UserMapper userMapper;//    手动开启sql的批量提交    private final   SqlSessionTemplate sqlSessionTemplate;    @Override    public Long add2(){        //关闭自动提交        SqlSession sqlSession = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH, false);        UserMapper mapper = sqlSession.getMapper(UserMapper.class);        long start = System.currentTimeMillis();        for (int i = 0; i < 10000; i++) {            User user = new User();            user.setUsername("name"+i);            user.setPassword("password"+i);            mapper.insertUsers(user);        }        //自动提交SQL        sqlSession.commit();        long end = System.currentTimeMillis();        System.out.println("耗时:"+( end - start ) + "ms");        return (end-start);    }    }

平均:0.12s

MyBatis的批量查询方法有哪些

第三种:用List集合的方式插入数据库(推荐)

@RestController@RequestMapping("/mybatis3/user")@RequiredArgsConstructorpublic class UserController {    private final IUserService iUserService;       @GetMapping("/one3")    public Long one3(){        return iUserService.add3();    }}  Long add3();@Service@RequiredArgsConstructorpublic class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {    private final UserMapper userMapper;  @Override    public Long add3(){        long start = System.currentTimeMillis();        List<User> userList = new ArrayList<>();        User user;        for (int i = 0; i < 10000; i++) {            user = new User();            user.setUsername("name"+i);            user.setPassword("password"+i);            userList.add(user);        }        userMapper.insertUsersThree(userList);        long end = System.currentTimeMillis();        System.out.println("耗时:"+( end - start ) + "ms");        return (end-start);    }    } Integer insertUsersThree(List<User> userList);<insert id="insertUsersThree">        insert into user(username,password)        values        <foreach collection="userList" item="user" separator=",">            (#{user.username},#{user.password})        </foreach>    </insert>

第四种: MyBatis-Plus提供的SaveBatch方法

@RestController@RequestMapping("/mybatis3/user")@RequiredArgsConstructorpublic class UserController {    private final IUserService iUserService;@GetMapping("/one4")    public Long one4(){        return iUserService.add4();    }}  Long add4();@Service@RequiredArgsConstructorpublic class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {    private final UserMapper userMapper;@Override    public Long add4() {        long start = System.currentTimeMillis();        List<User> userList= new ArrayList<>();        User user ;        for (int i = 0; i < 10000; i++) {            user = new User();            user.setUsername("name"+i);            user.setPassword("password"+i);            userList.add(user);        }        saveBatch(userList);        long end = System.currentTimeMillis();        System.out.println("耗时:"+( end - start ) + "ms");        return (end-start);    }    }

直接报错:

MyBatis的批量查询方法有哪些

看报错信息:

长串:Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: com.huang.mybatis3.mapper.UserMapper.insert (batch index #1) failed. Cause: java.sql.BatchUpdateException: Data truncation: Out of range value for column &lsquo;id&rsquo; at row 1
; Data truncation: Out of range value for column &lsquo;id&rsquo; at row 1; nested exception is java.sql.BatchUpdateException: Data truncation: Out of range value for column &lsquo;id&rsquo; at row 1] with root cause

短串:Data truncation: Out of range value for column &lsquo;id&rsquo; at row 1

翻译一下:

MyBatis的批量查询方法有哪些

可以发现就是我们的id超出范围:

MyBatis的批量查询方法有哪些

int类型改为bigint即可

故此我们可以得出一个结论:设置数据库id的时候设置为bigint还是蛮好的哈

平均时间:0.2s

MyBatis的批量查询方法有哪些

第五种 MyBatis-Plus提供的InsertBatchSomeColumn方法(推荐)

InsertBatchSomeColumn方法了解

MyBatis的批量查询方法有哪些

这个类的注解就写的很明白

扩展这个InsertBatchSomeColumn方法

@Slf4jpublic class EasySqlInjector extends DefaultSqlInjector {    @Override    public List<AbstractMethod> getMethodList(Class<?> mapperClass, TableInfo tableInfo) {        // 注意:此SQL注入器继承了DefaultSqlInjector(默认注入器),调用了DefaultSqlInjector的getMethodList方法,保留了mybatis-plus的自带方法        List<AbstractMethod> methodList = super.getMethodList(mapperClass, tableInfo);        methodList.add(new InsertBatchSomeColumn(i -> i.getFieldFill() != FieldFill.UPDATE));        log.info("扩展的getMethodList方法被框架调用了");        return methodList;    }}

扩展的方法注入bean容器

@Configurationpublic class MybatisPlusConfig {    @Bean    public  EasySqlInjector sqlInjector(){        return new EasySqlInjector();    }}

创建一个Mapper去实现我们的扩展的飞方法

public interface EasySqlInjectMapper<T> extends BaseMapper<T> {        Integer insertBatchSomeColumn(Collection<T> entityList);}

业务层

@Override    public Long add5() {        long start = System.currentTimeMillis();        List<User> userList= new ArrayList<>();        User user ;        for (int i = 0; i < 10000; i++) {            user = new User();            user.setUsername("name"+i);            user.setPassword("password"+i);            userList.add(user);        }        userMapper.insertBatchSomeColumn(userList);        long end = System.currentTimeMillis();        System.out.println("耗时:"+( end - start ) + "ms");        return (end-start);    }

耗时: 0.2 s

MyBatis的批量查询方法有哪些

关于“MyBatis的批量查询方法有哪些”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“MyBatis的批量查询方法有哪些”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

免责声明:

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

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

MyBatis的批量查询方法有哪些

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MyBatis的批量查询方法有哪些

这篇文章主要介绍了MyBatis的批量查询方法有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MyBatis的批量查询方法有哪些文章都会有所收获,下面我们一起来看看吧。一.直接循环插入@RestContro
2023-07-05

MyBatis-Plus分页查询的方法有哪些

本文小编为大家详细介绍“MyBatis-Plus分页查询的方法有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“MyBatis-Plus分页查询的方法有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。方法:
2023-06-29

Mybatis批量插入大量数据的方法有哪些

本文小编为大家详细介绍“Mybatis批量插入大量数据的方法有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Mybatis批量插入大量数据的方法有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Mybat
2023-07-05

Mybatis动态SQL foreach批量操作方法有哪些

本篇内容主要讲解“Mybatis动态SQL foreach批量操作方法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Mybatis动态SQL foreach批量操作方法有哪些”吧!动态SQ
2023-07-05

在线域名批量查询工具有哪些

1. 域名批量查询工具2. Whois批量查询工具3. 域名信息查询工具4. 域名解析查询工具5. 域名注册信息查询工具6. 域名服务器查询工具7. 域名可用性查询工具8. 域名价格查询工具9. 域名历史记录查询工具10. 域名监测工具
2023-06-12

Java批量执行的方法有哪些

Java中批量执行的方法有以下几种:1. 使用for循环进行批量执行:通过for循环遍历一个集合或数组,然后依次执行相同的操作。```javaList list = Arrays.asList("a", "b", "c");for (Str
2023-08-09

Mybatis和Mybatis-Plus时间范围查询方式有哪些

小编给大家分享一下Mybatis和Mybatis-Plus时间范围查询方式有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、mysql1.传入时间范围参数类型是字符串 2023-06-20

mybatis接收以逗号分隔的字符串批量查询方法

本篇内容介绍了“mybatis接收以逗号分隔的字符串批量查询方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!接收以逗号分隔的字符串批量查询
2023-06-28

MyBatis的五种批量查询实例总结

为了提高代码的执行效率,我们有时需要采用批量查询的查询方法,下面这篇文章主要给大家介绍了关于MyBatis的五种批量查询的相关资料,需要的朋友可以参考下
2023-02-28

域名查询的方法有哪些

1. WHOIS查询:WHOIS是一种查询域名所有者、注册商、注册日期等信息的协议,可以在WHOIS查询网站上进行查询。2. DNS查询:通过DNS(Domain Name System)服务器查询域名对应的IP地址,可以使用命令行工具如n
2023-06-17

域名批量查询的方法是什么

域名批量查询的方法可以通过以下步骤实现:1. 准备一个包含所有要查询的域名的列表。2. 找到一个支持批量查询的域名查询工具,例如WHOIS或域名解析器。3. 将域名列表复制到查询工具中,或者将列表保存为CSV文件并导入查询工具。4. 运行查
2023-06-10

Java中Mybatis分页查询的传参方式有哪些

这篇文章主要介绍了Java中Mybatis分页查询的传参方式有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java中Mybatis分页查询的传参方式有哪些文章都会有所收获,下面我们一起来看看吧。一、顺序传
2023-07-05

MySQL单表查询的方法有哪些

这篇文章主要讲解了“MySQL单表查询的方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL单表查询的方法有哪些”吧!前言查询是数据操作至关重要的一部分,比如说在所有商品中查找
2023-07-04

Golang中IP查询的方法有哪些

这篇“Golang中IP查询的方法有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Golang中IP查询的方法有哪些”文
2023-07-05

gitlab权限查询的方法有哪些

这篇文章主要介绍“gitlab权限查询的方法有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“gitlab权限查询的方法有哪些”文章能帮助大家解决问题。通过Web界面查询权限GitLab的Web界
2023-07-05

springboot分页查询的方法有哪些

在Spring Boot中,可以使用以下方法来实现分页查询:使用Spring Data JPA的Pageable接口和Page对象来实现分页查询。在Repository方法中,可以定义一个带有Pageable参数的查询方法,并返回Page对
springboot分页查询的方法有哪些
2024-03-13

MySQL递归查询的方法有哪些

在MySQL中,可以使用以下方法来实现递归查询:使用存储过程:可以通过编写存储过程来实现递归查询。存储过程可以递归地调用自身来实现查询操作。使用WITH RECURSIVE子句:MySQL 8.0版本及以上支持使用WITH RECURSIV
MySQL递归查询的方法有哪些
2024-04-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录