当前位置: 首页 > news >正文

SpringBoot3.x + JDK21 整合 Mybatis-Plus

前言

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 依赖包,还有对应生成器所需的依赖包

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.5</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>org.liurb</groupId><artifactId>Springboot3-CRUD</artifactId><version>0.0.1-SNAPSHOT</version><name>Springboot3-CRUD</name><description>Springboot3-CRUD</description><properties><java.version>21</java.version><mybatis-plus.version>3.5.6</mybatis-plus.version><freemarker.version>2.3.32</freemarker.version><mysql-connector-java.version>8.4.0</mysql-connector-java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>${mybatis-plus.version}</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>${mybatis-plus.version}</version></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>${mysql-connector-java.version}</version><scope>runtime</scope></dependency><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>${freemarker.version}</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

生成代码

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

创建代码生成器

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

运行生成 demo_user 表的对应代码

配置数据库链接

spring:application:name: Springboot3-CRUD#配置数据源datasource:url: jdbc:mysql://192.168.1.31:3307/my_db?useSSL=false&useUnicode=true&characterEncoding=utf-8username: test_usrpassword: test_usr#Passw0rddriver-class-name: com.mysql.cj.jdbc.Driverhikari:minimum-idle: 5maximum-pool-size: 10max-lifetime: 1800000idle-timeout: 180000connection-timeout: 30000

配置 MapperScan 注解

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

测试用例

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

@SpringBootTest
class Springboot3CrudApplicationTests {@ResourceDemoUserService demoUserService;@Testvoid contextLoads() {DemoUser record = new DemoUser();record.setName("李四");record.setAge(18);demoUserService.save(record);}}

记录保存成功

创建查询接口

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

@RestController
@RequestMapping("/crud/demoUser")
public class DemoUserController {@ResourceDemoUserService demoUserService;@GetMapping("/{userId}")public DemoUser user(@PathVariable Long userId) {return demoUserService.getById(userId);}}

请求返回

http://www.lryc.cn/news/352132.html

相关文章:

  • Java类和对象(五)—— 抽象类、接口、Object类和内部类
  • 图像上下文学习|多模态基础模型中的多镜头情境学习
  • 汇编:函数以及函数参数传递
  • linux-ftp服务器搭建简介
  • 二十一、openlayers官网示例Custom Controls解析——自定义控件扩展Control类
  • 【博主推荐】HTML5实现520表白、情人节表白模板源码
  • 【YOLOv5/v7改进系列】替换激活函数为SiLU、ReLU、LeakyReLU、FReLU、PReLU、Hardswish、Mish、ELU等
  • 修改MySQL root用户密码
  • 力扣刷题---409. 最长回文串【简单】
  • 百度智能云参与信通院多项边缘计算标准编制,「大模型时代下云边端协同 AI 发展研讨会」成功召开
  • 前后端联调
  • 根据配置的mode环境显示不同的index模板
  • hls.js实现分片播放视频
  • K8s 运维架构师实战课程
  • AIGC基础教学:AI+建筑设计,一场划时代变革的序幕已经拉开
  • 领域知识 | 智能驾驶安全领域部分常见概论
  • 力扣刷题---返回word中所有不重复的单词
  • 正点原子LWIP学习笔记(一)lwIP入门
  • 16、设计模式之迭代器模式
  • 自然语言处理实战项目29-深度上下文相关的词嵌入语言模型ELMo的搭建与NLP任务的实战
  • TCP/IP体系模型简介
  • 【ZYNQ】AXI-Quad-SPI SDK 开发记录 测试
  • Django提交表单出错提示错误
  • 鸿蒙开发 组件之间的传值
  • [晕事]今天做了件晕事35 VM发送给gateway太多ARP,导致攻击检查?
  • 虹科干货丨多设备协同无忧:Linux环境下PCAN固定设备ID通道分配指南
  • 【python】flask操作数据库工具SQLAlchemy,详细用法和应用实战
  • web前端项目已有阿里巴巴图标基础上,再次导入阿里巴巴图标的方法
  • 头歌openGauss-存储过程第2关:修改存储过程
  • ThreadLocal简单使用案例