SpringBoot3+JDK21集成MyBatisPlus3.5.5

2024-01-24 19:04

本文主要是介绍SpringBoot3+JDK21集成MyBatisPlus3.5.5,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

哈喽,大家好,我是呼噜噜,在上一篇文章SpringBoot3+Jdk17来了 | 春见知识分享基础上,笔者把jdk17直接换成了jdk21一步到位,来踩踩坑

添加依赖

修改pom.xml文件:

  <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.5</version></dependency><!--        生成器--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.5.3</version></dependency><!--        mysql驱动依赖--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency>

试了很多版本,坑还是非常多的,这几个还是比较兼容的

修改配置文件

修改application.yml文件,如果没有,那建议把application.properties改成application.yml,格式更加清爽,一目了然,当然你也可以不换

spring:datasource:url: jdbc:mysql://192.xx9.xx3.xx:3306/test?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=trueusername: rootpassword: xxx

添加数据库的连接地址,用户名,密码

在JDBC连接url中有几个项属性,我们分别来看下:

zeroDateTimeBehavior=convertToNull

如果没有添加zeroDateTimeBehavior,在操作值为0的timestamp类型时不能正确的处理,而是默认抛出一个异常
该属性有下列三个属性值:

  • exception:默认值,即抛出SQL state [S1009]. Cannot convert value…的异常
  • convertToNull:将日期转换成NULL值
  • round:替换成最近的日期即0001-01-01

useUnicode=true&characterEncoding=utf-8

使用Unicode字符集并且设置字符编码为utf-8,一旦设置后,不管数据库是什么编码,读出与写入都会自动切换编码

autoReconnect=true

设置超时重连

支持分页

src/main/java/com.zj.java21demo/config目录下,新建一个类MybatisPlusConfig

@Configuration
//@MapperScan("scan.your.mapper.package")
public class MybatisPlusConfig {/*** 添加分页插件*/@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));//如果配置多个插件,切记分页最后添加//interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); 如果有多数据源可以不配具体类型 否则都建议配上具体的DbTypereturn interceptor;}
}

其中com.zj.java21demo是包名,根据自己的来,DbType.MYSQL是数据源的类型

支持代码自动生成

添加依赖

<!-- 模板引擎 -->
<dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.30</version>
</dependency>
<!-- lombok -->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>RELEASE</version><scope>compile</scope>
</dependency>

新建自动生成的类CodeGenerator,并将其与启动类Java21DemoApplication放在同一个目录下:

package com.zj.java21demo;import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import io.micrometer.common.util.StringUtils;import java.util.Collections;
import java.util.Scanner;public class CodeGenerator {/*** <p>* 读取控制台内容* </p>*/public static String scanner(String tip) {Scanner scanner = new Scanner(System.in);StringBuilder help = new StringBuilder();help.append("请输入" + tip + ":");System.out.println(help.toString());if (scanner.hasNext()) {String ipt = scanner.next();if (StringUtils.isNotBlank(ipt)) {return ipt;}}throw new MybatisPlusException("请输入正确的" + tip + "!");}public static void main(String[] args) {FastAutoGenerator.create("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=UTF-8&useUnicode=true&useSSL=false", "root", "abc123")// 全局配置.globalConfig(builder -> {builder.author("xiaoniuhululu") // 设置作者.commentDate("yyyy-MM-dd hh:mm:ss")   //注释日期.outputDir(System.getProperty("user.dir") + "/src/main/java") // 指定输出目录.disableOpenDir() //禁止打开输出目录,默认打开;})// 包配置.packageConfig(builder -> {builder.parent("com.zj.java21demo") // 设置父包名!!!!.pathInfo(Collections.singletonMap(OutputFile.xml, System.getProperty("user.dir") + "/src/main/resources/mappers")); // 设置mapperXml生成路径})// 策略配置.strategyConfig(builder -> {builder//.addInclude("sys_menu") // 设置需要生成的表名.addInclude(scanner("表名,多个英文逗号分割").split(","))
//           .addTablePrefix("sys_") // 设置过滤表前缀// Entity 策略配置.entityBuilder().enableLombok() //开启 Lombok.enableFileOverride() // 覆盖已生成文件.naming(NamingStrategy.underline_to_camel)  //数据库表映射到实体的命名策略:下划线转驼峰命.columnNaming(NamingStrategy.underline_to_camel)    //数据库表字段映射到实体的命名策略:下划线转驼峰命// Mapper 策略配置.mapperBuilder().enableFileOverride() // 覆盖已生成文件// Service 策略配置.serviceBuilder().enableFileOverride() // 覆盖已生成文件.formatServiceFileName("%sService") //格式化 service 接口文件名称,%s进行匹配表名,如 UserService.formatServiceImplFileName("%sServiceImpl") //格式化 service 实现类文件名称,%s进行匹配表名,如 UserServiceImpl// Controller 策略配置.controllerBuilder().enableFileOverride() // 覆盖已生成文件;}).templateEngine(new FreemarkerTemplateEngine()) // 我们这里使用Freemarker引擎模板,默认的是Velocity引擎模板.execute();}
}

注意要设置好包名

我们接着开始测试,通过navicat建好表user

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (`id` int NOT NULL AUTO_INCREMENT,`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '姓名',`account` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '账号',`password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '密码',`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',`modified_time` datetime NULL DEFAULT NULL COMMENT '修改时间',`is_active` int NULL DEFAULT NULL COMMENT '有效标志',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

然后直接运行CodeGenerator,输入表名user,如果时多个表名用,隔开

还需要注意的时UserMapper类,需要添加注解@Mapper

@Mapper  //!!!
public interface UserMapper extends BaseMapper<User> {}

测试并验证crud

这个就不具体展开了,可以通过postman调用接口来测试,也可以单元测试来测试


感谢阅读,原创不易,如果有收获的话,就点个免费的[]or[转发],你的支持会激励我输出更高质量的文章,感谢!

计算机内功、源码解析、科技故事、项目实战等更多硬核文章,在公众号「小牛呼噜噜」,感兴趣可以关注一下!

这篇关于SpringBoot3+JDK21集成MyBatisPlus3.5.5的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/640681

相关文章

SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程

《SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程》LiteFlow是一款专注于逻辑驱动流程编排的轻量级框架,它以组件化方式快速构建和执行业务流程,有效解耦复杂业务逻辑,下面给大... 目录一、基础概念1.1 组件(Component)1.2 规则(Rule)1.3 上下文(Conte

Springboot3+将ID转为JSON字符串的详细配置方案

《Springboot3+将ID转为JSON字符串的详细配置方案》:本文主要介绍纯后端实现Long/BigIntegerID转为JSON字符串的详细配置方案,s基于SpringBoot3+和Spr... 目录1. 添加依赖2. 全局 Jackson 配置3. 精准控制(可选)4. OpenAPI (Spri

SpringBoot3中使用虚拟线程的完整步骤

《SpringBoot3中使用虚拟线程的完整步骤》在SpringBoot3中使用Java21+的虚拟线程(VirtualThreads)可以显著提升I/O密集型应用的并发能力,这篇文章为大家介绍了详细... 目录1. 环境准备2. 配置虚拟线程方式一:全局启用虚拟线程(Tomcat/Jetty)方式二:异步

使用vscode搭建pywebview集成vue项目实践

《使用vscode搭建pywebview集成vue项目实践》:本文主要介绍使用vscode搭建pywebview集成vue项目实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录环境准备项目源码下载项目说明调试与生成可执行文件核心代码说明总结本节我们使用pythonpywebv

Maven项目中集成数据库文档生成工具的操作步骤

《Maven项目中集成数据库文档生成工具的操作步骤》在Maven项目中,可以通过集成数据库文档生成工具来自动生成数据库文档,本文为大家整理了使用screw-maven-plugin(推荐)的完... 目录1. 添加插件配置到 pom.XML2. 配置数据库信息3. 执行生成命令4. 高级配置选项5. 注意事

Java集成Onlyoffice的示例代码及场景分析

《Java集成Onlyoffice的示例代码及场景分析》:本文主要介绍Java集成Onlyoffice的示例代码及场景分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 需求场景:实现文档的在线编辑,团队协作总结:两个接口 + 前端页面 + 配置项接口1:一个接口,将o

Swagger2与Springdoc集成与使用详解

《Swagger2与Springdoc集成与使用详解》:本文主要介绍Swagger2与Springdoc集成与使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1. 依赖配置2. 基础配置2.1 启用 Springdoc2.2 自定义 OpenAPI 信息3.

JDK9到JDK21中值得掌握的29个实用特性分享

《JDK9到JDK21中值得掌握的29个实用特性分享》Java的演进节奏从JDK9开始显著加快,每半年一个新版本的发布节奏为Java带来了大量的新特性,本文整理了29个JDK9到JDK21中值得掌握的... 目录JDK 9 模块化与API增强1. 集合工厂方法:一行代码创建不可变集合2. 私有接口方法:接口

Spring Boot 集成 Solr 的详细示例

《SpringBoot集成Solr的详细示例》:本文主要介绍SpringBoot集成Solr的详细示例,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录环境准备添加依赖配置 Solr 连接定义实体类编写 Repository 接口创建 Service 与 Controller示例运行

Spring Boot集成SLF4j从基础到高级实践(最新推荐)

《SpringBoot集成SLF4j从基础到高级实践(最新推荐)》SLF4j(SimpleLoggingFacadeforJava)是一个日志门面(Facade),不是具体的日志实现,这篇文章主要介... 目录一、日志框架概述与SLF4j简介1.1 为什么需要日志框架1.2 主流日志框架对比1.3 SLF4