SpringBoot3+JDK21集成MyBatisPlus3.5.5

SpringBoot3+JDK21集成MyBatisPlus3.5.5

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

添加依赖

修改pom.xml文件:

  <dependency>
      <groupId>***.baomidou</groupId>
      <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
      <version>3.5.5</version>
  </dependency>
  <!--        生成器-->
  <dependency>
      <groupId>***.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=true
    username: root
    password: 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/***.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;
    }
}

其中***.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>***pile</scope>
</dependency>

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

package ***.zj.java21demo;

import ***.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import ***.baomidou.mybatisplus.generator.FastAutoGenerator;
import ***.baomidou.mybatisplus.generator.config.OutputFile;
import ***.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import ***.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import io.micrometer.***mon.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") // 设置作者
            .***mentDate("yyyy-MM-dd hh:mm:ss")   //注释日期
            .outputDir(System.getProperty("user.dir") + "/src/main/java") // 指定输出目录
            .disableOpenDir() //禁止打开输出目录,默认打开
            ;
        })
        // 包配置
        .packageConfig(builder -> {
            builder.parent("***.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 ***MENT '姓名',
  `a***ount` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL ***MENT '账号',
  `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL ***MENT '密码',
  `create_time` datetime NULL DEFAULT NULL ***MENT '创建时间',
  `modified_time` datetime NULL DEFAULT NULL ***MENT '修改时间',
  `is_active` int NULL DEFAULT NULL ***MENT '有效标志',
  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[转发],你的支持会激励我输出更高质量的文章,感谢!

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

转载请说明出处内容投诉
CSS教程_站长资源网 » SpringBoot3+JDK21集成MyBatisPlus3.5.5

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买