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

相关推荐
太空眼睛21 小时前
【MCP】使用SpringBoot基于Streamable-HTTP构建MCP-Server
spring boot·sse·curl·mcp·mcp-server·spring-ai·streamable
幽络源小助理21 小时前
springboot校园车辆管理系统源码 – SpringBoot+Vue项目免费下载 | 幽络源
vue.js·spring boot·后端
刀法如飞21 小时前
一款开箱即用的Spring Boot 4 DDD工程脚手架
java·后端·架构
uzong21 小时前
后端系统设计文档模板
后端
幽络源小助理21 小时前
SpringBoot+Vue车票管理系统源码下载 – 幽络源免费项目实战代码
vue.js·spring boot·后端
猫吻鱼21 小时前
【系列文章合集】【全部系列文章合集】
spring boot·dubbo·netty·langchain4j
uzong1 天前
软件架构指南 Software Architecture Guide
后端
又是忙碌的一天1 天前
SpringBoot 创建及登录、拦截器
java·spring boot·后端
勇哥java实战分享1 天前
短信平台 Pro 版本 ,比开源版本更强大
后端
学历真的很重要1 天前
LangChain V1.0 Context Engineering(上下文工程)详细指南
人工智能·后端·学习·语言模型·面试·职场和发展·langchain