月下飞天镜,云生结海楼。
1 前言
在前文中已经分享了springboot 3.0项目升级实践 和 Springcloud Alibaba + jdk17+nacos 项目实践,在本文中,将继续分享项目升级遇到的问题,springboot3
和 mybatisplus3
是项目开发过程中重要的框架,在 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是大趋势,在这个过程中会持续不断的遇到各种类型的问题,在这个过程中能够增加自己的实践经验和解决问题的能力。后续还会继续分享升级整合过程中遇到的冲突和问题。