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是大趋势,在这个过程中会持续不断的遇到各种类型的问题,在这个过程中能够增加自己的实践经验和解决问题的能力。后续还会继续分享升级整合过程中遇到的冲突和问题。

相关推荐
我是一颗柠檬1 小时前
【MySQL全面教学】MySQL性能优化实战Day13(2026年)
数据库·后端·sql·mysql·性能优化·database
小江的记录本1 小时前
【JVM虚拟机】JVM调优:常用JVM参数、调优核心指标、OOM排查、GC日志分析、Arthas工具使用(附《思维导图》+《面试高频考点清单》)
java·jvm·spring boot·后端·python·spring·面试
程序员cxuan1 小时前
我花了两天时间,终于把 Codex 额度掉太快的问题整明白了!!
人工智能·后端·程序员
IT_陈寒1 小时前
Vue这个动态响应坑把我整不会了
前端·人工智能·后端
金銀銅鐵1 小时前
[Java] 用图形化界面演示 iadd, isub, iconst_<i> 指令的效果
java·后端·python
AskHarries2 小时前
做国内还是出海
后端
日月云棠2 小时前
10 Integer —— 最常用的整数包装类深度解析
java·后端
大鸡腿同学2 小时前
大模型为何总 “胡说八道”?做完 RAG 知识库,我看懂了它的底层逻辑
后端
一 乐2 小时前
高校实习信息发布网站|基于Spring Boot的高校实习信息发布网站的设计与实现(源码+数据库+文档)
java·数据库·spring boot·后端·论文·毕设·高校实习信息发布网站
安久12 小时前
springboot图片上传至服务器本地保存
后端