springboot3与mybatisplus3.5.5 升级实践

月下飞天镜,云生结海楼。

1 前言

在前文中已经分享了springboot 3.0项目升级实践Springcloud Alibaba + jdk17+nacos 项目实践,在本文中,将继续分享项目升级遇到的问题,springboot3mybatisplus3 是项目开发过程中重要的框架,在 jdk17 的环境下,会遇到一些使用的配置和api的运用问题。本文将结合项目升级实践,分享项目改造过程中遇到的问题。

2 依赖引入

在项目开发中, mybatisplus 的引入自从 3.5.4 之后,引入方式可以使用 mybatis-plus-boot-starter 也可以使用 mybatis-plus-spring-boot3-starter。如下所示,常用的 mybatisplus 如下所示。

xml 复制代码
<!-- mybatis-plus-spring-boot3-starter -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
    <version>${mybatisplus.version}</version>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>${mybatisplus.version}</version>
</dependency>
<!-- mybatis-plus-extension  扩展功能 -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-extension</artifactId>
    <version>${mybatisplus.version}</version>
</dependency>
<!-- mybatis-plus-generator 代码自动生成工具-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>${mybatisplus.version}</version>
</dependency>

在项目中,使用 mybatisplus 按照业务要求对数据进行增删改查,在分页查询的场景下,进行了分页插件的配置。

java 复制代码
// jdk1.8 环境下 mybatis-plus 分页插件
@Bean
public PaginationInterceptor paginationInterceptor() {
    return new PaginationInterceptor();
}

// jdk17 环境下 mybatis-plus-3.5.5 分页插件
@Bean
public MybatisPlusInterceptor paginationInterceptor() {
    MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
    interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
    return interceptor;
}

这里分享一下在项目开发中常用的数据库和 myabtisplus 的配置信息。

yaml 复制代码
# mybatis-plus 配置
mybatis-plus:
  mapper-locations: classpath:/mapper/*.xml
  type-aliases-package: com.platform.bootlog.entity
  global-config:
    db-config:
      id-type: assign_id
    banner: true
  configuration:
    map-underscore-to-camel-case: true
     # 是否输出执行的sql 信息
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl 
    # log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl
# spring datasource 配置
spring:
  application:
    name: boot-log
  profiles:
    active: dev
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    hikari:
      connection-test-query: select 1
      max-lifetime: 180000
      minimum-idle: 10
      maximum-pool-size: 50
      idle-timeout: 36000
      connection-timeout: 50000
    type: com.zaxxer.hikari.HikariDataSource
    url: jdbc:mysql://localhost:3306/mall_business?useUnicode=true&characterEncoding=utf8&useSSL=false&tinyInt1isBit=true&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true&useAffectedRows=true
    username: root
    password: 123456

3 问题分析

3.1 SelectExpressionItem ClassNotFoundException

由于项目开发引入的是公司封装的依赖,在升级依赖时遇到了问题 ClassNotFound,错误的详细内容如下图所示。

错误信息是类 SelectExpressionItem 找不到,由于 mybatisplus 升级,其分页插件的配置也发生了变化。

xml 复制代码
<dependency>
    <groupId>com.github.jsqlparser</groupId>
    <artifactId>jsqlparser</artifactId>
    <version>4.6</version>
</dependency>

这里依赖的版本不匹配问题,在 mybatisplus3.5.5 中应该匹配的版本是 jsqlparser4.6 ,但是项目中还引入了 jsqlparser4.7 的版本。解决办法将高版本的依赖 exclude 掉即可实现错误的解决。

3.2 分页插件使用不当

在业务进行分页查询操作时,需要确保在启动类上添加 @MapperScan 注解或者在每个 mapper 方法上添加 @Mapper 注解,确保 Mapper 文件能够正确的添加到项目配置中。此外对于查询参数,可以使用定义实体类继承 Page 对象或者自定义 Page 查询参数进行操作,对于使用排序的分页查询方法,需要自定义排序对象进行处理。此外需要说明的是使用 Wrapper 不能进行关联表查询,关联表查询的需要在 xml 文件中自定义查询语句进行处理。

3.3 批量处理

常见问题是批量操作新增或者更新,使用 Mybatis-Plus 提供的批量操作方法性能欠佳,此外还要考虑批量处理的性能问题,如果业务需要大量的批处理动作,需要自定义 sql 进行处理。

4 总结

在本文中,主要分享了在 springboot3 升级过程中,与 Mybatis-Plus 整合实践遇到的问题。升级框架使用jdk17是大趋势,在这个过程中会持续不断的遇到各种类型的问题,在这个过程中能够增加自己的实践经验和解决问题的能力。后续还会继续分享升级整合过程中遇到的冲突和问题。

相关推荐
anqi276 分钟前
在sheel中运行Spark
大数据·开发语言·分布式·后端·spark
程序员小刚31 分钟前
基于SpringBoot + Vue 的作业管理系统
vue.js·spring boot·后端
问道飞鱼1 小时前
【Springboot知识】Springboot计划任务Schedule详解
java·spring boot·后端·schedule
o0o0o0D3 小时前
jmeter 执行顺序和组件作用域
后端
神仙别闹3 小时前
基于ASP.NET+MySQL实现待办任务清单系统
后端·mysql·asp.net
程序员buddha3 小时前
【Spring Boot】Spring Boot + Thymeleaf搭建mvc项目
spring boot·后端·mvc
认真的小羽❅3 小时前
Spring Boot Validation实战详解:从入门到自定义规则
java·数据库·spring boot
MaCa .BaKa3 小时前
36-校园反诈系统(小程序)
java·spring boot·mysql·小程序·vue·maven·uniapp
一直走下去-明3 小时前
使用 Spring Boot 构建 REST API
spring boot
okok__TXF4 小时前
spring详解-循环依赖的解决
java·后端·spring