十八,Spring Boot 整合 MyBatis-Plus 的具体设置

[复制链接]
发表于 2026-1-20 05:05:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
十八,Spring Boot 整合 MyBatis-Plus 的具体设置




1. MyBatis-Plus 的根本先容

MyBatis-Plus 官网文档:https://baomidou.com/

MyBatis-Plus 是一个 MyBatis 的加强工具,在 MyBatis 的根本上只做加强不做改变,为简化开辟、进步服从而生。

MyBatis puls (简称 MP) 是一个Mybatis 的加强工具,在 MyBatis 的根本上只做加强不做改变,为简化开辟,提供服从而生。
强盛的CRUD操纵:内置通用Mapper,通用 Service,通过少量设置即可实现单表大部门的CRUD操纵,更有强盛的条件构造器,满意各类使用需求 。
关于 MyBatis Plus 的更多具体内容,各人可以移步至✏️✏️✏️ MyBatis-Plus_ChinaRainbowSea的博客-CSDN博客
2. Spring Boot 整合 MyBatis Plus 的具体设置


  • 预备数据库,和数据表。如下图所示:

  1. CREATE DATABASE `springboot_mybatispuls`
  2. USE `springboot_mybatispuls`
  3. CREATE TABLE `monster` (
  4. `id` int not null auto_increment,
  5. `age` int not null,
  6. `birthday` DATE DEFAULT NULL,
  7. `email` VARCHAR(255) DEFAULT NULL,
  8. `gender` CHAR(1) DEFAULT null,
  9. `name` VARCHAR(255) DEFAULT NULL,
  10. `salary` DOUBLE not NULL,
  11. PRIMARY KEY(`id`)
  12. )
  13. SELECT * from monster
  14. INSERT INTO  `monster` (`id`,`age` ,`birthday`,`email`,`gender`,`name`,`salary`)
  15. VALUES (1,20,'2000-10-10','[email protected]','男','牛魔王',9000.99);
  16. INSERT INTO  `monster` (`id`,`age` ,`birthday`,`email`,`gender`,`name`,`salary`)
  17. VALUES (2,10,'2000-12-12','[email protected]','女','白骨精',9999.99);
复制代码

  • 我们导入相干的 jar 依靠。这里我们使用 Druid 数据库毗连池。
   对于 Mybatis-puls 相干的 jar 包,各人可以在:✏️✏️✏️ https://mvnrepository.com/ 找到所须要的版本。
  

   

  • https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter
  

  这里我使用的是:3.4.3 的版本。
  1. <!--        引入 mybatis-puls starter-->
  2.         <!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
  3.         <dependency>
  4.             <groupId>com.baomidou</groupId>
  5.             <artifactId>mybatis-plus-boot-starter</artifactId>
  6.             <version>3.4.3</version>
  7.         </dependency>
复制代码

引入 Druid 数据库的 jar 依靠。

  1. <!--        引入 druid 依赖-->
  2.         <dependency>
  3.             <groupId>com.alibaba</groupId>
  4.             <artifactId>druid</artifactId>
  5.             <version>1.1.17</version>
  6.         </dependency>
复制代码
完备的 pom.xml 的编写的 jar 依靠
  1. <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <groupId>com.rainbowsea</groupId>    <artifactId>springboot_mybatispuls</artifactId>    <version>1.0-SNAPSHOT</version>    <!--    导入SpringBoot 父工程-规定写法-->    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>2.5.3</version>    </parent>    <!--    导入web项目场景启动器:会主动导入和web开辟相干的jar包全部依靠【库/jar】-->    <!--    背面还会在分析spring-boot-starter-web 到底引入哪些相干依靠-->    <dependencies>        <!--        引入 web starter 依靠-->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <!--        引入 mysql 驱动: 这里老师使用版本仲裁 8.0.26-->        <dependency>            <groupId>mysql</groupId>            <artifactId>mysql-connector-java</artifactId>        </dependency>        <!--        引入设置处置惩罚器-->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-configuration-processor</artifactId>        </dependency>        <!--引入lombok-->        <dependency>            <groupId>org.projectlombok</groupId>            <artifactId>lombok</artifactId>        </dependency>        <!--        引入 test stater -->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>        </dependency>        <!--        引入 druid 依赖-->
  2.         <dependency>
  3.             <groupId>com.alibaba</groupId>
  4.             <artifactId>druid</artifactId>
  5.             <version>1.1.17</version>
  6.         </dependency>
  7. <!--        引入 mybatis-puls starter-->
  8.         <!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
  9.         <dependency>
  10.             <groupId>com.baomidou</groupId>
  11.             <artifactId>mybatis-plus-boot-starter</artifactId>
  12.             <version>3.4.3</version>
  13.         </dependency>
  14.     </dependencies></project>
复制代码

  • 编写对应 数据表的在Java当中对应的 Bean 对象。

   特殊分析:
  这里使用 @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") 注解。来设置数据表当中的时间赋值到该 Bean 对象上的时间属性的一个时间格式。
  

  • pattern = "yyyy-MM-dd" 是设置时间表现的格式样式
  • timezone = "GMT+8" 是设置时区差。这里我们中国是东半球,时差为 + 8 个小时。
  须要注意的是:这个注解只对前端表现,有效果,后端,控制台表现无效。
  

  

  • 将Spring Boot 默认的 HikariCP 数据库毗连池,切换为我们想要的 Druid 数据库毗连池。
这里我们通过设置类的方式,举行切换。

  1. package com.rainbowsea.springboot.mybatis.config;
  2. import com.alibaba.druid.pool.DruidDataSource;
  3. import org.springframework.boot.context.properties.ConfigurationProperties;
  4. import org.springframework.context.annotation.Bean;
  5. import org.springframework.context.annotation.Configuration;
  6. import javax.sql.DataSource;
  7. @Configuration
  8. public class DruidDataSourceConfig {
  9.     @ConfigurationProperties(value = "spring.datasource")  // 读取 类路径下的application.yaml
  10.     // 的信息,并为下面的 对应的 setXX 进行赋值操作
  11.     @Bean
  12.     public DataSource dataSource() {
  13.         DruidDataSource druidDataSource = new DruidDataSource();
  14.         return druidDataSource;
  15.     }
  16. }
复制代码
在 resource 类路径下创建一个,名为 applicaiton.yaml 文件,设置编写,相干对于,Druid 数据库毗连池的信息。如下:

  1. server:
  2.   port: 9090
  3. spring:
  4.   datasource:
  5.     url: jdbc:mysql://localhost:3306/springboot_mybatispuls?useSSL=true&useUnicode=true&characterEncoding=UTF-8
  6.     driver-class-name: com.mysql.cj.jdbc.Driver
  7.     username: root
  8.     password: MySQL123
复制代码

   特殊分析:我们还可以在 application.yaml 文件当中,设置一下,开启 Mybatis puls 的打印表现日记信息的。
  1. mybatis-plus:
  2.   configuration:  # 进行mybatis-puls配置,配置项和mybatis是一样的 开启日志日志
  3.     log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
复制代码

  完备的 application.yaml 的文件内容的编写。如下:
  1. server:  port: 9090spring:  datasource:    url: jdbc:mysql://localhost:3306/springboot_mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8    driver-class-name: com.mysql.cj.jdbc.Driver    username: root    password: MySQL123mybatis-plus:
  2.   configuration:  # 进行mybatis-puls配置,配置项和mybatis是一样的 开启日志日志
  3.     log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
复制代码

  • 编写项目的场景启动器。

运行测试,我们是否乐成切换为了,我们想要的 Duird 数据毗连池,由于在 Spring Boot 当中测试的话,必须要编写好对应的项目启动器,否则,是无法测试的,会报错。同时也测试我们的 MyBatis puls 是否设置上去了。


  1. package com.rainbowsea.springboot.mybatisplus;
  2. import com.rainbowsea.springboot.mybatispuls.Application;
  3. import com.rainbowsea.springboot.mybatispuls.bean.Monster;
  4. import com.rainbowsea.springboot.mybatispuls.mapper.MonsterMapper;
  5. import com.rainbowsea.springboot.mybatispuls.service.MonsterService;
  6. import org.junit.jupiter.api.Test;
  7. import org.springframework.boot.test.context.SpringBootTest;
  8. import org.springframework.jdbc.core.JdbcTemplate;
  9. import javax.annotation.Resource;
  10. import java.util.List;
  11. @SpringBootTest(classes = Application.class)
  12. public class ApplicationTest {
  13.     @Resource
  14.     private JdbcTemplate jdbcTemplate;
  15.     @Test
  16.     public void getDruidSourceTest() {
  17.         System.out.println(jdbcTemplate.getDataSource().getClass());
  18.     }
  19. }
复制代码

  • 建一个mapper/dao 的包,在该包下创建一个名为 MonsterMapper 的接口,通过署理类的方式,在该接口下,编写我们要实行业务的 SQL 语句的方法。

  1. package com.rainbowsea.springboot.mybatispuls.mapper;
  2. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  3. import com.rainbowsea.springboot.mybatispuls.bean.Monster;
  4. import org.apache.ibatis.annotations.Mapper;
  5. import org.apache.ibatis.annotations.Param;
  6. /**
  7. * BaseMapper 已经默认提供了很多的crud 方法,可以直接使用
  8. * 如果BaseMapper 提供的方法不能满足业务需求,我们可以再开发新的方法,
  9. * 并在MonsterMapper.xml 进行配置 ===> 使用插件开发
  10. */
  11. @Mapper
  12. public interface MonsterMapper extends BaseMapper<Monster> {
  13. }
复制代码
  特殊分析:
  BaseMapper  已经默认提供了许多的crud 方法,可以直接使用。
  

   

    假如BaseMapper 提供的方法不能满意业务需求,我们可以再开辟新的方法,就像使用 mybatis 一样,我们可以在 。
  

    假如是: BaseMapper 当中的方法,我们就不须要自行编写对应 SQL 语句的 xml 文件内容了,固然,对于自界说的方法,我们也可以通过 Mybatisx 插件为我们主动天生对应的xml的SQL语句。
  这里我们在该 接口类当中,使用了 @Mapper 注解。该注解的作用就是,让Spring Boot 加载的时间,会扫描这个类。从而找到这个类。如许我们就不须要额外的设置,包扫描了 。
  运行测试:

  1. package com.rainbowsea.springboot.mybatisplus;
  2. import com.rainbowsea.springboot.mybatispuls.Application;
  3. import com.rainbowsea.springboot.mybatispuls.bean.Monster;
  4. import com.rainbowsea.springboot.mybatispuls.mapper.MonsterMapper;
  5. import com.rainbowsea.springboot.mybatispuls.service.MonsterService;
  6. import org.junit.jupiter.api.Test;
  7. import org.springframework.boot.test.context.SpringBootTest;
  8. import org.springframework.jdbc.core.JdbcTemplate;
  9. import javax.annotation.Resource;
  10. import java.util.List;
  11. @SpringBootTest(classes = Application.class)
  12. public class ApplicationTest {
  13.     @Resource
  14.     private MonsterMapper monsterMapper;
  15.     @Test
  16.     public void testMonsterMapper() {
  17.         Monster monster = monsterMapper.selectById(2);
  18.         System.out.println("monster--" + monster);
  19.     }
  20. }
复制代码


  • 编写对应的 Severl 业务处置惩罚
起首编写接口。

  1. package com.rainbowsea.springboot.mybatispuls.service;
  2. import com.baomidou.mybatisplus.extension.service.IService;
  3. import com.rainbowsea.springboot.mybatispuls.bean.Monster;
  4. /**
  5. * 1.传统方式:在接口中定义方法/声明方法,然后在实现类中进行实现
  6. * 2. 在mybatis-plus中,我们可以继承父接口 IService
  7. * 3. 这个 IService 接口声明很多方法,比如crud
  8. * 4. 如果默认提供方法不能满足需要,我们可以再声明需要的方法,然后在实现类中进行实现即可
  9. */
  10. // 注意:接口不要添加 @Service
  11. public interface MonsterService extends IService<Monster> {
  12.     // 自定义方法
  13.     public void t1();
  14. }
复制代码
  特殊分析:
  

  • 传统方式:在接口中界说方法/声明方法,然后在实现类中举行实现
  • 在mybatis-plus中,我们可以继续父接口 IService
  • 这个 IService 接口声明许多方法,比如crud。
  

   

   

  • 假如默认提供方法不能满意须要,我们可以再声明须要的方法,然后在实现类中举行实现即可。
  

  在编写其接口的实现类:


  1. package com.rainbowsea.springboot.mybatispuls.service.impl;
  2. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  3. import com.rainbowsea.springboot.mybatispuls.bean.Monster;
  4. import com.rainbowsea.springboot.mybatispuls.mapper.MonsterMapper;
  5. import com.rainbowsea.springboot.mybatispuls.service.MonsterService;
  6. import org.springframework.stereotype.Service;
  7. /**
  8. * 1. 传统方式:在实现类中直接进行implements MonsterService
  9. * 2. 在mybatis-puls 中,我们开发Service 实现类,需要继承 ServiceImpl
  10. * 3. 我们观察看到 ServiceImpl 类实现 IService 接口
  11. * 4. MonsterService 接口它继承了 IService 接口
  12. * 5. 这里MonsterServiceImpl 就可以认为是实现了 MonsterService接口,这样MonsterService
  13. * 就可以使用IService接口方法,也可以理解可以使用 MonsterService 方法
  14. * 6. 如果 MonsterService接口中,声明了其它的方法/自定义方法,那么我们依然需要在MonsterService
  15. * 类,进行实现
  16. */
  17. @Service
  18. public class MonsterServiceImpl
  19.     extends ServiceImpl<MonsterMapper, Monster>
  20.         implements MonsterService {
  21.     @Override
  22.     public void t1() {
  23.     }
  24. }
复制代码
  特殊分析,重点内容:
  

  • 传统方式:在实现类中直接举行 implements MonsterService
  • 在mybatis-puls 中,我们开辟Service 实现类,须要继续 ServiceImpl
  

   

   


    • 我们观察看到 ServiceImpl 类实现 IService 接口,MonsterService 接口它继续了 IService 接口,这里MonsterServiceImpl 就可以以为是实现了 MonsterService接口,如许MonsterService就可以使用IService接口方法,也可以明白可以使用 MonsterService 方法。


   

   

  • 假如 MonsterService接口中,声明白别的的方法/自界说方法,那么我们依然须要在MonsterService类,举行实现 。
  运行测试:

  1. package com.rainbowsea.springboot.mybatisplus;
  2. import com.rainbowsea.springboot.mybatispuls.Application;
  3. import com.rainbowsea.springboot.mybatispuls.bean.Monster;
  4. import com.rainbowsea.springboot.mybatispuls.mapper.MonsterMapper;
  5. import com.rainbowsea.springboot.mybatispuls.service.MonsterService;
  6. import org.junit.jupiter.api.Test;
  7. import org.springframework.boot.test.context.SpringBootTest;
  8. import org.springframework.jdbc.core.JdbcTemplate;
  9. import javax.annotation.Resource;
  10. import java.util.List;
  11. @SpringBootTest(classes = Application.class)
  12. public class ApplicationTest {
  13.     @Resource
  14.     private MonsterService monsterService;
  15.     @Test
  16.     public void testMonsterService() {
  17.         Monster monster = monsterService.getById(2);
  18.         System.out.println(monster);
  19.         // 这些 List 都是 monsterService 继承 IService 当中的方法
  20.         List<Monster> list = monsterService.list();
  21.         for (Monster monster1 : list) {
  22.             System.out.println(monster1);
  23.         }
  24.     }
  25. }
复制代码


  • 编写对应的 Controller 控制器,在前端处置惩罚表现。


  1. package com.rainbowsea.springboot.mybatispuls.controller;
  2. import com.rainbowsea.springboot.mybatispuls.bean.Monster;
  3. import com.rainbowsea.springboot.mybatispuls.service.MonsterService;
  4. import org.springframework.stereotype.Controller;
  5. import org.springframework.web.bind.annotation.GetMapping;
  6. import org.springframework.web.bind.annotation.RequestParam;
  7. import org.springframework.web.bind.annotation.ResponseBody;
  8. import javax.annotation.Resource;
  9. import java.util.List;
  10. @Controller
  11. public class MonsterController {
  12.     @Resource
  13.     private MonsterService monsterService;
  14.     // 方法,根据id 返回对应对象
  15.     @ResponseBody
  16.     @GetMapping("/monster")
  17.     public Monster getMonsterById(@RequestParam(value = "id") Integer id) {
  18.         return monsterService.getById(id);
  19.     }
  20.     // 编写方法,返回所有的monster信息
  21.     // 后面我们还会说分页查询
  22.     @GetMapping("/list")
  23.     @ResponseBody
  24.     public List<Monster> listMonster() {
  25.         return monsterService.list();
  26.     }
  27. }
复制代码
运行测试:注意:我们这里设置的端口是9090,并不是8080。



3. Spring Boot 整合 MyBatis plus 注意事项和细节

假如这个Java当中的类名 Monster 和 数据库表中的表名差别等,不能映射上。则可以通过
  1. @TableName指定
  2. @TableName("monster_") // 填数据库表当中定义的表名
复制代码



   我们在该 Bean 类上添加上 @TableName 注解。
  @TableName("monster_") value 值指明为:对应数据库当中的数据表,为那张数据表举行一个映射处置惩罚。
  



4. MyBatisx 插件的安装和使用

MybatisX 是一款专为 IntelliJ IDEA 计划的快速开辟插件,旨在提拔 MyBatis 与 MyBatis-Plus 框架的开辟服从。
官网文档所在:https://baomidou.com/guides/mybatis-x/

安装:
   

  • 打开 IntelliJ IDEA。
  • 进入 File -> Settings -> Plugins -> Browse Repositories。
  • 在搜索框中输入 mybatisx。
  • 找到 MybatisX 插件并点击安装。

   4.1 MyBatisx 核心功能

4.1.1 XML 映射跳转

MybatisX 提供了便捷的 XML 映射文件与 Java 接口之间的跳转功能,让开辟者可以或许快速地在两者之间切换,进步开辟服从。

4.1.2 代码天生

通过 MybatisX,您可以轻松地根据数据库表布局天生对应的 Java 实体类、Mapper 接口及 XML 映射文件。

4.1.3 重置模板

MybatisX 允许您重置代码天生模板,以规复到默认设置或自界说模板内容。

4.1.4 JPA 风格提示

MybatisX 支持 JPA 风格的代码提示,包罗新增、查询、修改和删除操纵的主动代码天生。


  • 天生新增操纵

  • 天生查询操纵

  • 天生修改操纵

  • 天生删除操纵

4.1.5 天生的表名与预期不符?

MybatisX 根据以下规则确定表名:

  • 实体类上的 JPA 注解,如:@Table(name="t_user")。
  • 实体类上的 mybatis-plus 注解,如:@TableName("t_user")。
  • 实体类上的表明,如:@TableName com.xx.xx.UserModel。
  • 若以上规则均不满意,则将驼峰定名的类名转换为下划线定名,如:UserModel 对应表名 user_model。
5. 末了:

   “在这个末了的篇章中,我要表达我对每一位读者的感激之情。你们的关注和复兴是我创作的动力源泉,我从你们身上罗致了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的范畴奋斗。感谢你们,我们总会在某个时候再次相遇。”
  

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表