最近在review朋友的代码时,发现了一个小问题。我朋友其实是在一个for循环中进行了插入(insert)数据库操作,这会导致连接、插入、断开连接的操作,会造成一定的性能问题。简化代码如下:/***插入操作*/@RequestMapping("/save")publicObjectsave(){booleanflag=false;//返回结果//添加(用户)数据for(inti=0;i<1000;i++){Useruser=newUser();user.setName("测试:"+i);user.setPassword("123456");//插入数据flag=userService.save(user);如果(!标志)中断;}returnflag;}这个不会改变程序最终的执行结果,但是会对程序的执行效率有很大的影响,就像你想把10件货物从A点送到B点,你可以选择一次发送1件,发送10次;也可以选择一次送10件,送1次。你会选择哪一个?这就是多循环插入和一次性插入的问题。PS:插入的数据量越大,批量插入的时间越短(相对于循环多次插入),其优势越大。批量插入实现方案在本文中,我们使用MyBatis-Plus(以下简称MP)自带的saveBatch方法来实现数据的批量插入功能。因为MP不是本文的重点,这里就不介绍了。如果不熟悉的朋友可以去他的官网:https://baomidou.com/guide/,本文重点介绍MP实现批量插入的具体步骤。1.引入MP框架首先,打开你的pom.xml文件,在文件中添加如下内容:>mybatis-plus-latest-version注:mybatis-plus-latest-version表示MP框架的最新版本号,可访问https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter查询最新的版本号,但是使用的时候记得把上面的“mybatis-plus-latest-version”替换成具体的版本号,比如正常引入的3.4.3框架。2.创建数据库和表这一步可以省略,主要是为了本文功能的实现,创建数据库和数据表的脚本如下:------------------------------创建数据库----------------------------设置NAMESutf8mb4;SETFOREIGN_KEY_CHECKS=0;DROPDATABASEIFEXISTS`testdb`;CREATEDATABASE`testdb`;USE`testdb`;--------------------------------创建用户表------------------------------DROPTABLEIFEXISTS`user`;CREATETABLE`user`(`id`int(11)NOTNULLAUTO_INCREMENT,`name`varchar(255)CHARACTERSETutf8mb4COLLATEutf8mb4_binNULLDEFAULTNULL,`password`varchar(255)CHARACTERSETutf8mb4COLLATEutf8mb4_binNULLDEFAULTNSTAULT`,`timeNSTAULT`,`createtimePRIMARYKEY(`id`)USINGBTREE)ENGINE=InnoDBAUTO_INCREMENT=6CHARACTERSET=utf8mb4COLLATE=utf8mb4_binROW_FORMAT=Dynamic;----------------------------------添加测试数据----------------------------INSERTINTO`user`VALUES(1,'赵云','123456','2021-09-1018:11:16');INSERTINTO`user`VALUES(2,'张飞','123456','2021-09-1018:11:28');INSERTINTO`user`VALUES(3,'关羽','123456','2021-09-1018:11:34');INSERTINTO`user`VALUES(4,'刘备','123456','2021-09-1018:11:41');INSERTINTO`user`VALUES(5,'CaoCao','123456','2021-09-1018:12:02');SETFOREIGN_KEY_CHECKS=1;3.具体代码实现(重点)①实体类首先创建数据库对应的User实体类:importlombok.Getter;importlombok.Setter;importjava.util.Date;@Getter@SetterpublicclassUser{privateintid;私有字符串名称;私有字符串密码;privateDatecreatetime;}②Controller层代码本文的核心是利用MP框架中IService类提供的saveBatch方法实现批量数据插入功能。Controller中对应的实现代码如下:.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;importjava.util.ArrayList;importjava.util.List;@RestController@RequestMapping("/u")公共类用户控制器{@AutowiredprivateUserServiceImpluserService;/***MP批量插入*/@RequestMapping("/savebatch")publicbooleansaveBatch(){List
