当前位置:   article > 正文

SpringBoot3.x + JDK21 整合 Mybatis-Plus_springboot jdk21

springboot jdk21

前言

SpringBoot3.0 开始最低要求 Java 17,虽然目前最新的版本为 JDK22,但是在官网上看到 JDK23 在今年9月又要发布了,感觉这 JDK 也有点太过于给力了

所以我们选择用目前的 LTS 版本 JDK21 就好了,不用追求最新的

springboot 版本

从官网的 https://start.spring.io/ 可以看到,目前的 SpringBoot 的最新正式版为 3.2.5,JAVA版本支持 17、21、22

mybatis-plus 版本

mybatis-plus 针对 springboot3.x 发布了新的依赖库,我们要选择带 spring-boot3 的版本

项目整合

项目资源下载

创建项目

JDK 选择 21,Java 选择 21

Spring Boot 选择 3.2.5,依赖选择 Spring Web

最后点击 Create 创建项目

pom.xml 文件

引入了 mybatis-plus 依赖包,还有对应生成器所需的依赖包

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>3.2.5</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>org.liurb</groupId>
  12. <artifactId>Springboot3-CRUD</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <name>Springboot3-CRUD</name>
  15. <description>Springboot3-CRUD</description>
  16. <properties>
  17. <java.version>21</java.version>
  18. <mybatis-plus.version>3.5.6</mybatis-plus.version>
  19. <freemarker.version>2.3.32</freemarker.version>
  20. <mysql-connector-java.version>8.4.0</mysql-connector-java.version>
  21. </properties>
  22. <dependencies>
  23. <dependency>
  24. <groupId>org.springframework.boot</groupId>
  25. <artifactId>spring-boot-starter-web</artifactId>
  26. </dependency>
  27. <dependency>
  28. <groupId>com.baomidou</groupId>
  29. <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
  30. <version>${mybatis-plus.version}</version>
  31. </dependency>
  32. <dependency>
  33. <groupId>com.baomidou</groupId>
  34. <artifactId>mybatis-plus-generator</artifactId>
  35. <version>${mybatis-plus.version}</version>
  36. </dependency>
  37. <dependency>
  38. <groupId>com.mysql</groupId>
  39. <artifactId>mysql-connector-j</artifactId>
  40. <version>${mysql-connector-java.version}</version>
  41. <scope>runtime</scope>
  42. </dependency>
  43. <dependency>
  44. <groupId>org.freemarker</groupId>
  45. <artifactId>freemarker</artifactId>
  46. <version>${freemarker.version}</version>
  47. </dependency>
  48. <dependency>
  49. <groupId>org.projectlombok</groupId>
  50. <artifactId>lombok</artifactId>
  51. </dependency>
  52. <dependency>
  53. <groupId>org.springframework.boot</groupId>
  54. <artifactId>spring-boot-starter-test</artifactId>
  55. <scope>test</scope>
  56. </dependency>
  57. </dependencies>
  58. <build>
  59. <plugins>
  60. <plugin>
  61. <groupId>org.springframework.boot</groupId>
  62. <artifactId>spring-boot-maven-plugin</artifactId>
  63. </plugin>
  64. </plugins>
  65. </build>
  66. </project>

生成代码

我们创建一张表 demo_user 进行测试

创建代码生成器

  1. public class CodeGenerator {
  2. // 数据库连接配置
  3. private static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
  4. private static final String JDBC_URL = "jdbc:mysql://192.168.1.31:3307/my_db?useSSL=false";
  5. private static final String JDBC_USER_NAME = "test_usr";
  6. private static final String JDBC_PASSOWRD = "test_usr#Passw0rd";
  7. // 输出目录
  8. private static final String MAIN_JAVA_PATH = "/src/main/java";
  9. private static final String MAIN_MAPPER_PATH = "/src/main/resources/mapper";
  10. // 包名和模块名
  11. private static final String PACKAGE_NAME = "org.liurb.springboot3";
  12. private static final String MODULE_NAME = "crud";
  13. // 表名,多个表使用英文逗号分割
  14. private static final String TBL_NAMES = "demo_user";
  15. // 表名的前缀,从表生成代码时会去掉前缀
  16. private static final String TABLE_PREFIX = "";
  17. // 生成代码入口main方法
  18. public static void main(String[] args) {
  19. FastAutoGenerator.create(JDBC_URL, JDBC_USER_NAME, JDBC_PASSOWRD)
  20. .globalConfig(builder -> builder
  21. .author("liurb") // 设置作者
  22. .outputDir(Paths.get(System.getProperty("user.dir")) + MAIN_JAVA_PATH) // 输出路径
  23. .commentDate("yyyy-MM-dd")
  24. .disableOpenDir() // 禁止打开输出目录
  25. )
  26. .packageConfig(builder -> builder
  27. .parent(PACKAGE_NAME) // 设置需要生成的表名
  28. .moduleName(MODULE_NAME) // 设置过滤表前缀
  29. .pathInfo(Collections.singletonMap(OutputFile.xml, Paths.get(System.getProperty("user.dir")) + MAIN_MAPPER_PATH)) // 设置mapperXml生成路径
  30. )
  31. .strategyConfig(builder -> builder
  32. .addInclude(TBL_NAMES) // 设置需要生成的表名
  33. .addTablePrefix(TABLE_PREFIX) // 设置过滤表前缀
  34. .entityBuilder() // 设置实体类
  35. .enableFileOverride() // 实体类覆盖
  36. .enableTableFieldAnnotation() // 属性加上说明注释
  37. .enableLombok() // 使用lombok
  38. .serviceBuilder() // 设置服务类
  39. .formatServiceFileName("%sService") // 格式化service类
  40. )
  41. .templateEngine(new FreemarkerTemplateEngine())
  42. .execute();
  43. }
  44. }

运行生成 demo_user 表的对应代码

配置数据库链接

  1. spring:
  2. application:
  3. name: Springboot3-CRUD
  4. #配置数据源
  5. datasource:
  6. url: jdbc:mysql://192.168.1.31:3307/my_db?useSSL=false&useUnicode=true&characterEncoding=utf-8
  7. username: test_usr
  8. password: test_usr#Passw0rd
  9. driver-class-name: com.mysql.cj.jdbc.Driver
  10. hikari:
  11. minimum-idle: 5
  12. maximum-pool-size: 10
  13. max-lifetime: 1800000
  14. idle-timeout: 180000
  15. connection-timeout: 30000

配置 MapperScan 注解

  1. @SpringBootApplication
  2. @MapperScan("org.liurb.**.mapper") // mapper 类路径
  3. public class Springboot3CrudApplication {
  4. public static void main(String[] args) {
  5. SpringApplication.run(Springboot3CrudApplication.class, args);
  6. }
  7. }

测试用例

我们通过单元测试保存一条记录

  1. @SpringBootTest
  2. class Springboot3CrudApplicationTests {
  3. @Resource
  4. DemoUserService demoUserService;
  5. @Test
  6. void contextLoads() {
  7. DemoUser record = new DemoUser();
  8. record.setName("李四");
  9. record.setAge(18);
  10. demoUserService.save(record);
  11. }
  12. }

记录保存成功

分页

分页拦截器配置

  1. @Configuration
  2. public class MybatisPlusConfig {
  3. @Bean
  4. public MybatisPlusInterceptor mybatisPlusInterceptor() {
  5. MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
  6. mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
  7. return mybatisPlusInterceptor;
  8. }
  9. }

分页查询大于等于12岁的用户,获取第一页的十条数据

  1. @Test
  2. void contextLoads() {
  3. Page page = new Page<>(1, 10);
  4. IPage<DemoUser> pageRecords = demoUserService.page(page, new LambdaQueryWrapper<DemoUser>().ge(DemoUser::getAge, 12));
  5. List<DemoUser> records = pageRecords.getRecords();
  6. System.out.println(records);
  7. }

运行截图如下:

sql 打印

查询的结果

创建查询接口

在控制层加入查询接口,根据 用户id 查询对应的记录

  1. @RestController
  2. @RequestMapping("/crud/demoUser")
  3. public class DemoUserController {
  4. @Resource
  5. DemoUserService demoUserService;
  6. @GetMapping("/{userId}")
  7. public DemoUser user(@PathVariable Long userId) {
  8. return demoUserService.getById(userId);
  9. }
  10. }

请求返回

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/967573
推荐阅读
相关标签
  

闽ICP备14008679号