mybatis與mybatis-plus使用示例

一、mybatis-plus概念

官方文檔:https://baomidou.com/guide/

mybatis使用方式是直接在xml中通過SQL語(yǔ)句操作數(shù)據(jù)庫(kù),包括簡(jiǎn)單的CRUD操作都必須

要寫SQL語(yǔ)句,而mybatis-plus在Mybatis基礎(chǔ)上擴(kuò)展了許多功能,對(duì)CRUD的封裝、代碼

生成器等,很好的提高基于MyBatis 的項(xiàng)目開發(fā)效率。

二、mybatis-plus的安裝配置

Spring Boot中快速使用

1,引入pom.xml依賴

1 <!-- mybatis-plus-->

2 <dependency>

3 <groupId>com.baomidou</groupId>

4 <artifactId>mybatis-plus-boot-starter</artifactId>

5 <version>3.0.3</version>

6 </dependency>

2,配置application-test.yml

1 mybatis-plus:

2 configuration:

3 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

4 mapper-locations: classpath:mapping/*Mapping.xml #配置自定義sql時(shí)Mapping.xml掃描的路徑

5 type-aliases-package: com.example.demo.*.entity #配置三掃碼的實(shí)體類路徑

6 global-config:

7 db-config:

8 logic-delete-value: 1 # 邏輯已刪除值(默認(rèn)為 1)

9 logic-not-delete-value: 0 # 邏輯未刪除值(默認(rèn)為 0)

10 id-type: none

3,Application 配置 MapperScan 注解

1 @MapperScan("com.example.demo.*.mapper")

2 @SpringBootApplication

3 public class DemoApplication {

4 public static void main(String[] args) {

5 SpringApplication.run(DemoApplication.class, args);

6 }

7 }三、mybatis-plus的代碼生成器

AutoGenerator 是 MyBatis-Plus 的代碼生成器,通過 AutoGenerator 可以快速生成

Entity、Mapper、Mapper XML、Service、Controller 等各個(gè)模塊的代碼,極大的提升

了開發(fā)效率。

1,引入pom.xml依賴

1 <!-- mp自動(dòng)代碼生成-->

2 <dependency>

3 <groupId>com.baomidou</groupId>

4 <artifactId>mybatis-plus-generator</artifactId>

5 <version>3.0.3</version>

6 </dependency>

7 <!-- velocity 模板引擎, 默認(rèn) -->

8 <dependency>

9 <groupId>org.apache.velocity</groupId>

10 <artifactId>velocity-engine-core</artifactId>

11 <version>2.0</version>

12 </dependency>

13

14 <!-- freemarker 模板引擎 -->

15 <dependency>

16 <groupId>org.freemarker</groupId>

17 <artifactId>freemarker</artifactId>

18 <version>2.3.23</version>

19 </dependency>

20

21 <!-- beetl 模板引擎 -->

22 <dependency>

23 <groupId>com.ibeetl</groupId>

24 <artifactId>beetl</artifactId>

25 <version>2.2.5</version>

26 </dependency>

2,引入代碼生成器模板類 MysqlGenerator.java

3,配置數(shù)據(jù)源地址、生成路徑和表名及其他自定義屬性3.1:配置生成路徑

1 //當(dāng)前路徑

2 String projectPath = System.getProperty("user.dir");

3 //輸出路徑

4 gc.setOutputDir(projectPath + "/src/main/java");

3.2: 數(shù)據(jù)源配置

1 // 數(shù)據(jù)源配置

2 DataSourceConfig dsc = new DataSourceConfig();

3 dsc.setUrl("jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8&useUnicode=true&useJ

4 // dsc.setSchemaName("public");

5 dsc.setDriverName("com.mysql.cj.jdbc.Driver");

6 dsc.setUsername("root");

7 dsc.setPassword("123456");

8 dsc.setDbType(DbType.MYSQL); //指定數(shù)據(jù)庫(kù)的類型

9 mpg.setDataSource(dsc);

3.3:包配置

1 // 包配置

2 PackageConfig pc = new PackageConfig();

3 pc.setParent("com.example.demo.test"); //自定義包的路徑

4 //pc.setModuleName("module"); //模塊名稱 設(shè)置后,會(huì)生成com.cxyxs.test.module,里面存放之前設(shè)

5 pc.setEntity("entity");

6 pc.setMapper("mapper");

7 pc.setService("service");

8 pc.setController("controller");

9 mpg.setPackageInfo(pc);

3.4:設(shè)置要生成的表

1 // 策略配置

2 StrategyConfig strategy = new StrategyConfig();

3 strategy.setInclude("t_test"); //設(shè)置映射的表名,可以設(shè)置多個(gè)表4:運(yùn)行main方法生成代碼文件

四、mybatis-plus的使用示例(單表,一對(duì)多,多對(duì)多,條件

構(gòu)造語(yǔ)句)

示例暫用三張表做演示:(t_user用戶表、t_role角色表、t_user_role用戶角色表)

以t_user表為例

(1)新建一個(gè)User表對(duì)應(yīng)實(shí)體類:

使用@TableName("t_user")進(jìn)行表名注解;

使用lombok插件的@Data注解在類上, 為類提供讀寫get/set屬性, 此外還提供了

equals()、hashCode()、toString() 方法;

補(bǔ)充: lombok插件使用:

1):在pom.xml添加依賴

1 <dependency>

2 <groupId>org.projectlombok</groupId>

3 <artifactId>lombok</artifactId>

4 <version>1.18.2</version>

5 </dependency>

2):添加IDE工具對(duì)Lombok的支持

IDEA中引入Lombok支持如下: 點(diǎn)擊File-- Settings設(shè)置界面,搜索安裝

Lombok插件;實(shí)體類繼承extends Model<User>,Model已經(jīng)實(shí)現(xiàn)了序列化,不用再手動(dòng)實(shí)現(xiàn)序列化;

1 /**

2 * 用戶實(shí)體類

3 * @Author fansongsong

4 */

5 @Data

6 @TableName("t_user")

7 public class User extends Model<User> {

8 /**

9 * 主鍵

10 */

11 private String id;

12 /**

13 * 用戶名

14 */

15 private String name;

16 /**

17 * 手機(jī)

18 */

19 private String mobile;

20 ...

21 /**

22 * 用戶地址

23 */24 @TableField(exist = false)

25 @JsonProperty("address_name")

26 private String addressName;

27 }

這里幾個(gè)注解需要注意,第一是@tableName("t_user"),它是指定與數(shù)據(jù)庫(kù)表的關(guān)聯(lián),這里

的注解意味著你的數(shù)據(jù)庫(kù)里應(yīng)該有一個(gè)名為user的表與之對(duì)應(yīng),并且數(shù)據(jù)表的列名應(yīng)該就是

User類的屬性;

如果有需要,對(duì)于User類中有而user表中沒有的屬性需要加注解@TableField(exist =

false),表示排除User類中的屬性;

如果有需要,把實(shí)體類字段名在以JSON形式返回前端時(shí)需要把該屬性的名稱序列化為另

外一個(gè)名稱@JsonProperty("address_name")注解 ;

(2) 新建Dao層接口UserMapper:

dao接口即UserMapper需要繼承mybatis-plus的Basemapper<User>接口,這樣就能夠使

用封裝好的很多通用方法,

使用@Repository注明dao層,在Spring中配置掃描包地址,然后生成dao層的bean,之

后被注入到ServiceImpl中

1

2 /**

3 * 用戶數(shù)據(jù)庫(kù)控制層接口Mapper

4 * @Author fansongsong

5 */

6 @Repository

7 public interface UserMapper extends BaseMapper<User> {

8

9 /**

10 * 根據(jù)用戶id獲取用戶角色組信息

11 * @param id 用戶id

12 * @return UserRoleVO

13 */

14 UserRoleVO getUserRole(String id);

15 }

(3)新建UserMapping.xml配置文件:使用<mapper namespace="com.example.demo.user.mapper.UserMapper">與第二

步的UserMapper接口唯一綁定

1 <?xml version="1.0" encoding="UTF-8"?>

2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/myba

3 <mapper namespace="com.example.demo.user.mapper.UserMapper">

4

5 <resultMap id="BaseResultMap" type="com.example.demo.user.entity.User">

6 <result column="id" jdbcType="VARCHAR" property="id" />

7 <result column="name" jdbcType="VARCHAR" property="name" />

8 <result column="mobile" jdbcType="VARCHAR" property="mobile" />

9 <result column="create_time" property="createTime" />

10 <result column="modify_time" property="modifyTime" />

11 <result column="deleted" property="deleted" />

12 <result column="status" property="status" />

13 </resultMap>

14

15 <!-- 通用查詢結(jié)果列 -->

16 <sql id="Base_Column_List">

17 id, name , mobile, create_time, modify_time, deleted, status

18 </sql>

19

20 </mapper>

(4)新建Service層類UserService:

繼承mybatis-plus的 IService<User>接口

1 /**

2 * 用戶服務(wù)類

3 * @author fansongsong

4 */

5 public interface IUserService extends IService<User> {

6 }

(5)新建ServiceImpl層類UserServiceImpl:UserServiceImpl類需要繼承mybatis-plus的ServiceImpl<對(duì)應(yīng)user實(shí)體Mapper, 對(duì)應(yīng)user

實(shí)體> 并實(shí)現(xiàn)mybatis-plus的IUserService接口

使用@Service注明該類為服務(wù)實(shí)現(xiàn)層

使用@Resource注解將指定Bean默認(rèn)按照ByName自動(dòng)注入

使用@Override加在實(shí)現(xiàn)方法上是覆蓋(override)或者重寫(因?yàn)橐獙?shí)現(xiàn)這個(gè)接口里面

的所有方法),不加編譯器也可以識(shí)別,加上增強(qiáng)代碼的可讀性

使用lombok的@Sl4j注解,進(jìn)行l(wèi)og打印日志;

1 **

2 * 用戶服務(wù)實(shí)現(xiàn)類

3 * @Author fansongsong

4 */

5 @Service

6 @Slf4j

7 public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserServic

8

9 @Resource

10 UserMapper userMapper;

11

12 @Resource

13 IUserService userService;

14

15 @Resource

16 TUserRoleService userRoleService;

17

18 /**

19 * 查詢用戶角色v1(自定義sql)

20 * @param id 用戶id

21 * @return UserRoleVO

22 */

23 @Override

24 public UserRoleVO userRoleV1(String id) {

25 //自定義sql根據(jù)用戶id獲取用戶角色組信息

26 UserRoleVO result = userMapper.getUserRole(id);

27 log.info("UserRoleVO result msg:"+ result.getName());

28 return result;

29 }

30 }(6)新建Controller層類UserController:

使用@RestController注解標(biāo)識(shí)該類為控制層;

使用@RequestMapping("/user")注解標(biāo)識(shí)控制層的映射請(qǐng)求,也就是通過它來指定控制

器可以處理哪些URL請(qǐng)求;

使用@Resource、@Autowired注解將指定Bean默認(rèn)按照ByName自動(dòng)注入

使用@GetMapping("/get_user/{id}")支持請(qǐng)求類型為get的請(qǐng)求,一般用于獲取資源請(qǐng)

求,值為請(qǐng)求路徑;

使用@PostMapping("/create")支持請(qǐng)求類型為post的請(qǐng)求,一般用于向服務(wù)器提交資

源,值為請(qǐng)求路徑;

使用@PutMapping("/update")支持請(qǐng)求類型為put的請(qǐng)求,一般用于向服務(wù)器更新資源,

值為請(qǐng)求路徑;

使用@DeleteMapping("/delete_user/{id}")支持請(qǐng)求類型為delete的請(qǐng)求,一般用于向服

務(wù)器刪除資源,值為請(qǐng)求路徑;

使用@PathVariable(value = "id")注解,獲取路徑參數(shù),如

@GetMapping("/get_user/{id}")請(qǐng)求獲取路徑中的{id}占位符的值;

使用@RequestBody注解,將JSON形式請(qǐng)求參數(shù)轉(zhuǎn)化為相應(yīng)的實(shí)體類

使用@RequestParam(value = "page_no", required = false, defaultValue = "1")注解,獲

取請(qǐng)求體中的參數(shù);

1 /**

2 * 用戶控制層

3 * @Author fansongsong

4 */

5

6 @RestController

7 @RequestMapping("/user")

8 public class UserController {

9

10 @Resource

11 private IUserService userService;

12

13 //一對(duì)一

14 /**

15 * 根據(jù)用戶id查詢用戶信息

16 * @param id 用戶id

17 * @return ApiResponse

18 */19 @GetMapping("/get_user/{id}")

20 public ApiResponse getUser(@PathVariable(value = "id") String id) {

21 User user = userService.getUser(id);

22 return ApiResponse.success(user);

23 }

24 }

1:?jiǎn)伪恚–RUD)

1.1: 新增, UserServiceImpl.createUser()

1 userMapper.insert(user);或者

2 userService.save(user);

1.2: 修改, UserServiceImpl.updateUser()

1 userMapper.updateById(user);或者

2 userService.updateById(user);

1.3: 刪除, UserServiceImpl.deleteUser()

1 userMapper.deleteById(id);或者

2 userService.removeById(id);

注意:mybatis-plus的刪除默認(rèn)是物理刪除,如果需要邏輯刪除要進(jìn)行相關(guān)配置

1.3.1:application-test.yml配置,指定刪除的value設(shè)為1,恢復(fù)的設(shè)為0

1 mybatis-plus:

2 global-config:

3 db-config:

4 logic-delete-value: 1 # 邏輯已刪除值(默認(rèn)為 1)

5 logic-not-delete-value: 0 # 邏輯未刪除值(默認(rèn)為 0)

1.3.2:在mybatis-plus-3.1.1版本之前需要在自己寫的配置類中配置,后續(xù)版本直接跳

過,spring已經(jīng)配好了

1 @Configuration2 public class MyConfig {

3 @Bean

4 public ISqlInjector SqlInjector(){

5 return new LogicSqlInjector();

6 }

7 }

1.3.3:先在數(shù)據(jù)庫(kù)加deleted字段,對(duì)應(yīng)的實(shí)體類deleted字段上加@TableLogic 注解標(biāo)

識(shí)(對(duì)應(yīng)字段類型推薦使用 Integer,Boolean,LocalDateTime),這就是告訴spring,我

要把這字段設(shè)為刪除標(biāo)志

1 /**

2 * 是否刪除(0:未刪,1:已刪)

3 */

4 @TableLogic//邏輯刪除

5 private Integer deleted;

1.4:查詢

1.4.1: 單數(shù)據(jù)查詢, UserServiceImpl.getUser()

1 // 一,Service提供的CRUD

2 // 1,根據(jù) ID 查詢

3 User user1 = userService.getById(id);

4

5 // 2,根據(jù) Wrapper,查詢一條記錄。結(jié)果集,如果是多個(gè)會(huì)拋出異常,隨機(jī)取一條加上限制條件 wrapper.

6 QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();

7 userQueryWrapper.lambda().eq(User::getId,id);

8 User user2 = userService.getOne(userQueryWrapper);

9

10 // 3,根據(jù) Wrapper,查詢一條記錄,throwEx(boolean),有多個(gè) result 是否拋出異常

11 User user3 = userService.getOne(userQueryWrapper,false);

12

13 // 4,根據(jù) Wrapper,查詢一條記錄,返回Map<String,Object>

14 Map<String,Object> user4 = userService.getMap(userQueryWrapper);

15

16 // 二,Mapper提供的CRUD

17

18 // 1,根據(jù) entity 條件,查詢一條記錄19 QueryWrapper<User> queryWrapper = new QueryWrapper<>();

20 queryWrapper.lambda().eq(User::getId,id);

21 queryWrapper.lambda().eq(User::getDeleted, 0);

22 User user6 = userMapper.selectOne(queryWrapper);

23 // 2,根據(jù) ID 查詢

24 User user7 = userMapper.selectById(id);

1.4.2: 列表數(shù)據(jù)查詢,UserServiceImpl.getListUser()

1 QueryWrapper<User> queryWrapper = new QueryWrapper<>();

2 List<User> result1 = userService.list(queryWrapper);

3 List<User> result2 = userMapper.selectList(queryWrapper);

2: 一對(duì)多查詢

2.1: 使用自定義sql, UserServiceImpl.getUserRoleV1()

2.2: 使用mybatis-plus單表查詢數(shù)據(jù)組裝,UserServiceImpl.getUserRoleV2()

3. 多對(duì)多查詢

3.1: 使用自定義sql,UserServiceImpl.getListUserRoleV2()

3.2: 使用mybatis-plus單表查詢數(shù)據(jù)組裝, UserServiceImpl.getListUserRoleV1()

4,分頁(yè)插件PageHelper

官方文檔:https://pagehelper.github.io/docs/howtouse/

配置:引入分頁(yè)插件

在 pom.xml 中添加如下依賴:

1 <!-- 分頁(yè)插件 -->

2 <dependency>

3 <groupId>com.github.pagehelper</groupId>

4 <artifactId>pagehelper</artifactId>

5 <version>5.1.0</version>

6 </dependency>

如何在代碼中使用

在實(shí)現(xiàn)類使用PageHelper.startPage(pageNo, pageSize);進(jìn)行分頁(yè)

1 //每頁(yè)的大小為pageSize,查詢第pageNo頁(yè)的結(jié)果

2 PageHelper.startPage(pageNo, pageSize);3 //執(zhí)行查詢語(yǔ)句

4 List<User> result = userService.list(queryWrapper);

在Controller使用new PageInfo<>(userList)進(jìn)行包裝返回前端

1 /**

2 * 根據(jù)篩選條件查詢用戶列表

3 * @param pageNo 當(dāng)前第幾頁(yè)

4 * @param pageSize 每頁(yè)顯示條數(shù)

5 * @param mobile 手機(jī)號(hào)

6 * @param name 用戶名

7 * @return List<User>

8 */

9 @GetMapping("/list_user")

10 public ApiResponse listUser(

11 @RequestParam(value = "page_no", required = false, defaultValue = "1") int pageNo

12 @RequestParam(value = "page_size", required = false, defaultValue = "5") int page

13 @RequestParam(value = "mobile", required = false) String mobile,

14 @RequestParam(value = "name", required = false) String name) {

15 List<User> userList = userService.listUser(pageNo,pageSize,mobile,name);

16 return ApiResponse.success(new PageInfo<>(userList));

17 }

五、MyBatis XML映射文件

學(xué)習(xí)文檔:https://www.w3cschool.cn/mybatis/f4uw1ilx.html

MyBatis 的真正強(qiáng)大在于它的映射語(yǔ)句,也是它的魔力所在。由于它的異常強(qiáng)大,映射器的 XML 文件

就顯得相對(duì)簡(jiǎn)單。如果拿它跟具有相同功能的 JDBC 代碼進(jìn)行對(duì)比,你會(huì)立即發(fā)現(xiàn)省掉了將近 95% 的

代碼。MyBatis 就是針對(duì) SQL 構(gòu)建的,并且比普通的方法做的更好。

1 resultMap – 是最復(fù)雜也是最強(qiáng)大的元素,用來描述如何從數(shù)據(jù)庫(kù)結(jié)果集中來加載對(duì)象。

2 sql – 可被其他語(yǔ)句引用的可重用語(yǔ)句塊。

3 insert – 映射插入語(yǔ)句

4 update – 映射更新語(yǔ)句

5 delete – 映射刪除語(yǔ)句

6 select – 映射查詢語(yǔ)句select 查詢語(yǔ)句是 MyBatis 中最常用的元素之一:

1 <select id="selectPerson" parameterType="int" resultType="hashmap">

2 SELECT * FROM PERSON WHERE ID = #{id}

3 </select>

Select 常用屬性描述:

1,XML映射文件和Mapper.java文件的綁定是通過xml中的

<mapper namespace = "Mapper類的完全限定名">

1 <mapper namespace="com.example.demo.user.mapper.UserMapper">

屬性

描述

id

在命名空間中唯一的標(biāo)識(shí)符,可以被用來引用這條語(yǔ)句。

parameterTyp

e

將會(huì)傳入這條語(yǔ)句的參數(shù)類的完全限定名或別名。這個(gè)屬性是可選的,因?yàn)?MyBatis 可以通過 Typ

默認(rèn)值為 unset。

resultType

從這條語(yǔ)句中返回的期望類型的類的完全限定名或別名。注意如果是集合情形,那應(yīng)該是集合可以包

resultType 或 resultMap,但不能同時(shí)使用。

resultMap

外部 resultMap 的命名引用。結(jié)果集的映射是 MyBatis 最強(qiáng)大的特性,對(duì)其有一個(gè)很好的理解的話

使用 resultMap 或 resultType,但不能同時(shí)使用。2. xml中sql通過標(biāo)簽的屬性id="getUserRole"和映射的Mapper.java進(jìn)行唯一綁定

insert,update 和 delete 語(yǔ)句的示例:

1

2 <insert id="insertAuthor">

3 insert into Author (id,username,password,email,bio)

4 values (#{id},#{username},#{password},#{email},#{bio})

5 </insert>

6

7 <update id="updateAuthor">

8 update Author set

9 username = #{username},10 password = #{password},

11 email = #{email},

12 bio = #{bio}

13 where id = #{id}

14 </update>

15

16 <delete id="deleteAuthor">

17 delete from Author where id = #{id}

18 </delete>

19

六,MyBatis 動(dòng)態(tài)SQL

使用MyBatis動(dòng)態(tài)SQL進(jìn)行不同條件拼接 SQL 語(yǔ)句,拼接的時(shí)候要確保不能忘了必要的空

格,還要注意省掉列名列表最后的逗號(hào)等。

常用的動(dòng)態(tài) SQL 元素:

if

choose (when, otherwise)

trim (where, set)

foreach

1,if

動(dòng)態(tài) SQL 通常要做的事情是有條件地包含 where 子句的一部分。比如:

1 <select id="getUserRoleList" resultMap="roleList" >

2 select

3 <include refid="Get_User_Role_List"/>

4 from t_user tu

5 left join t_user_role tur on tur.user_id = tu.id

6 left join t_role tr on tr.id = tur.role_id

7 <where>

8 tu.deleted = 0

9 <if test="roleId != null and roleId != ''">

10 and tr.id = #{roleId}11 </if>

12 <if test="mobile != null and mobile != ''">

13 and tu.mobile = #{mobile}

14 </if>

15 </where>

16 </select>

動(dòng)態(tài)的通過"roleId"和"mobile"兩個(gè)條件進(jìn)行數(shù)據(jù)篩選,那個(gè)參數(shù)不為空就執(zhí)行那個(gè)條件語(yǔ)句

2,choose (when, otherwise)

有些時(shí)候,我們不想用到所有的條件語(yǔ)句,而只想從中擇其一二。針對(duì)這種情況,MyBatis

提供了 choose 元素,例如這次變?yōu)樘峁┝?title"就按"title"查找,提供了"author"就

按"author"查找,若兩者都沒有提供,就返回所有符合條件的結(jié)果

1 <select id="findActiveBlogLike"

2 resultType="Blog">

3 SELECT * FROM BLOG WHERE state = ‘ACTIVE’

4 <choose>

5 <when test="title != null">

6 AND title like #{title}

7 </when>

8 <when test="author != null and author.name != null">

9 AND author_name like #{author.name}

10 </when>

11 <otherwise>

12 AND featured = 1

13 </otherwise>

14 </choose>

15 </select>

4,trim (where, set)

一般常用在update 語(yǔ)句,set 元素可以被用于動(dòng)態(tài)包含需要更新的列,而舍去其他的。比

如:

1 <update id="updateAuthorIfNecessary">

2 update Author3 <set>

4 <if test="username != null">username=#{username},</if>

5 <if test="password != null">password=#{password},</if>

6 <if test="email != null">email=#{email},</if>

7 <if test="bio != null">bio=#{bio}</if>

8 </set>

9 where id=#{id}

10 </update>

5,foreach

動(dòng)態(tài) SQL 的另外一個(gè)常用的必要操作是需要對(duì)一個(gè)集合進(jìn)行遍歷,通常是在構(gòu)建 IN 條件語(yǔ)句的時(shí)候。比

如:

1 <select id="selectPostIn" resultType="domain.blog.Post">

2 SELECT *

3 FROM POST P

4 WHERE ID in

5 <foreach item="item" index="index" collection="list"

6 open="(" separator="," close=")">

7 #{item}

8 </foreach>

9 </select>

同時(shí)也可以使用foreach來進(jìn)行批量插入數(shù)據(jù)(注意:雖然Mybatis 對(duì)動(dòng)態(tài)語(yǔ)句沒有數(shù)量上

的限制,由于Mysql 對(duì)語(yǔ)句的長(zhǎng)度有限制,默認(rèn)是 4M,如果要進(jìn)行大數(shù)據(jù)量批處理時(shí),

盡量先把數(shù)據(jù)進(jìn)行l(wèi)ist切分,在進(jìn)行批量插入操作)

代碼示例:UserServiceImpl.createBatchSaveUser()

1 <!-- 批量保存sql -->

2 <insert id="batchSave" parameterType="java.util.List" >

3 INSERT INTO t_user (

4 `id`,

5 `name`,

6 `mobile`,

7 `create_time`,

8 `modify_time`,

9 `deleted`,

10 `status`,11 `age`

12 )

13 VALUES

14 <foreach collection="list" index="index" item="item" separator=",">

15 (

16 #{item.id},

17 #{item.name},

18 #{item.mobile},

19 #{item.createTime},

20 #{item.modifyTime},

21 #{item.deleted},

22 #{item.status},

23 #{item.age}

24 )

25 </foreach>

26 </insert>

對(duì)于批量數(shù)據(jù)操作mybatis-plus也有相關(guān)支持

1 userService.saveBatch(userList);

2 userService.saveOrUpdateBatch(userList);

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容