哈喽,大家好,我是呼噜噜,在上一篇文章SpringBoot3+Jdk17来了 | 春见知识分享基础上,笔者把jdk17直接换成了jdk21一步到位,来踩踩坑
修改pom.xml文件:
com.baomidou mybatis-plus-spring-boot3-starter3.5.5 com.baomidou mybatis-plus-generator3.5.3 mysql mysql-connector-java8.0.33
试了很多版本,坑还是非常多的,这几个还是比较兼容的
修改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=true username: root password: xxx
添加数据库的连接地址,用户名,密码
在JDBC连接url中有几个项属性,我们分别来看下:
如果没有添加zeroDateTimeBehavior,在操作值为0的timestamp类型时不能正确的处理,而是默认抛出一个异常
该属性有下列三个属性值:
使用Unicode字符集并且设置字符编码为utf-8,一旦设置后,不管数据库是什么编码,读出与写入都会自动切换编码
设置超时重连
在src/main/java/com.zj.java21demo/config目录下,新建一个类MybatisPlusConfig:
@Configuration //@MapperScan("scan.your.mapper.package") public class MybatisPlusConfig { /** * 添加分页插件 */ @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));//如果配置多个插件,切记分页最后添加 //interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); 如果有多数据源可以不配具体类型 否则都建议配上具体的DbType return interceptor; } }
其中com.zj.java21demo是包名,根据自己的来,DbType.MYSQL是数据源的类型
添加依赖
org.freemarker freemarker2.3.30 org.projectlombok lombokRELEASE compile
新建自动生成的类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 { /** ** 读取控制台内容 *
*/ 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{ }
这个就不具体展开了,可以通过postman调用接口来测试,也可以单元测试来测试
感谢阅读,原创不易,如果有收获的话,就点个免费的[赞]or[转发],你的支持会激励我输出更高质量的文章,感谢!
计算机内功、源码解析、科技故事、项目实战等更多硬核文章,在公众号「小牛呼噜噜」,感兴趣可以关注一下!