ruoyi-vue Springboot3版本集成mybatisplus实现代码增强,解决mybatisplus和pagehelper冲突问题,创建者,创建时间,更新者,更新时间字段自动填充

若依版本:ruoyi-vue-Springboot3 2.8.9

1. 移除主pom里面原来的pagehelper分页插件和mybatis

            <!-- pagehelper 分页插件 -->
            <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper-spring-boot-starter</artifactId>
                <version>${pagehelper.boot.version}</version>
            </dependency>

            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>${mybatis-spring-boot.version}</version>
            </dependency>


            <pagehelper.boot.version>2.1.0</pagehelper.boot.version>
            <mybatis-spring-boot.version>3.0.3</mybatis-spring-boot.version>
        

2.引入mybatisplus和pagehelper

            <!-- mybatis-plus -->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
                <version>${mybatis-plus.version}</version>
            </dependency>

            <!-- pagehelper -->
            <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper</artifactId>
                <version>${pagehelper.version}</version>
            </dependency>

            <!-- lombok -->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
            </dependency>

            <mybatis-plus.version>3.5.5</mybatis-plus.version>
            <pagehelper.version>5.3.3</pagehelper.version>
            <lombok.version>1.18.30</lombok.version>

注意:这里引入的是pagehelper,不是pagehelper-spring-boot-starter,还有mybatisplus的版本是mybatis-plus-spring-boot3-starter,如果使用pagehelper-spring-boot-starter或者mybatis-plus--boot-starter都会很容易引起版本冲突,我也是尝试了好久才解决版本冲突问题,如果你发现其他不冲突版本,可以@我

3.在common模块的pom里面同样移除原来的mybatis和pagehelper依赖,添加下面依赖

        <!-- mybatis-plus -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
        </dependency>

        <!-- pagehelper -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
        </dependency>

         <!-- lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
         </dependency>

4.删除原来的MybatisConfig文件,添加MybatisPlusConfig

package com.ruoyi.framework.config;

import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.github.pagehelper.PageInterceptor;
import com.ruoyi.common.handler.FieldMetaObjectHandler;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor;
import java.util.Properties;

/**
 * @author Johnson
 */
@Configuration
public class MybatisPlusConfig {
    
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 乐观锁
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        // 防止全表更新与删除
        interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());
        return interceptor;
    }
    
    @Bean
    // 分页插件配置
    PageInterceptor pageInterceptor(){
        PageInterceptor pageInterceptor = new PageInterceptor();
        Properties properties = new Properties();
        properties.setProperty("helperDialect", "mysql");
        pageInterceptor.setProperties(properties);
        return pageInterceptor;
    }
    
    /**
     * mybatis-plus 自动填充字段
     */
    @Bean
    public FieldMetaObjectHandler fieldMetaObjectHandler(){
        return new FieldMetaObjectHandler();
    }
}

注意:因为我直接导入了pagehelper而不是原来的Springboot整合后的pagehelper-spring-boot-starter,所以在配置文件里面配置分页参数将不生效,所以必须要在Java代码里面配置。

5.修改admin模块下的application.yml里面的mybatis配置为

mybatis-plus:
  # 搜索指定包别名
  typeAliasesPackage: com.ruoyi.**.domain
  # 配置mapper的扫描,找到所有的mapper.xml映射文件
  mapperLocations: classpath*:mapper/**/*Mapper.xml
  # 加载全局的配置文件
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    banner: false  #启动时不输出mp的图标
    db-config:
      id-type: auto
      logic-delete-value: 1
      logic-not-delete-value: 0
      logic-delete-field: del_flag

6.添加自动填充处理类

package com.ruoyi.common.handler;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.utils.SecurityUtils;
import org.apache.ibatis.reflection.MetaObject;

import java.util.Date;

/**
 * mybatis-plus 自动填充字段
 *
 * @author theodo
 */
public class FieldMetaObjectHandler implements MetaObjectHandler {
    private final static String CREATE_TIME = "createTime";
    private final static String CREATE_BY = "createBy";
    private final static String UPDATE_TIME = "updateTime";
    private final static String UPDATE_BY = "updateBy";
    private final static String DEL_FLAG = "delFlag";

    @Override
    public void insertFill(MetaObject metaObject) {
        LoginUser loginUser = SecurityUtils.getLoginUser();
        Date date = new Date();
        // 创建者
        strictInsertFill(metaObject, CREATE_BY, String.class, loginUser.getUsername());
        // 创建时间
        strictInsertFill(metaObject, CREATE_TIME, Date.class, date);
        // 更新者
        strictInsertFill(metaObject, UPDATE_BY, String.class, loginUser.getUsername());
        // 更新时间
        strictInsertFill(metaObject, UPDATE_TIME, Date.class, date);
        // 删除标识
        strictInsertFill(metaObject, DEL_FLAG, Integer.class, 0);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
    	LoginUser loginUser = SecurityUtils.getLoginUser();
        // 更新者
        strictUpdateFill(metaObject, UPDATE_BY, String.class, loginUser.getUsername());
        // 更新时间
        strictUpdateFill(metaObject, UPDATE_TIME, Date.class, new Date());
    }
}

7.现在已经成功集成mybatisplus了,快去试试吧!如果按照上面步骤还是出现问题,建议你使用maven从新加载一下项目。

<think>好的,我需要帮助用户将Ruoyi-Vue升级到Spring Boot 3。首先,我应该回顾一下Ruoyi-Vue的当前技术栈。Ruoyi-Vue是基于Spring Boot、MyBatisVue的前后端分离框架,所以升级Spring Boot 3可能会涉及多个组件的兼容性问题。 首先,用户需要确认当前使用的Spring Boot版本。假设他们使用的是Spring Boot 2.x,那么升级到3.0需要遵循官方迁移指南。Spring Boot 3.0需要Java 17及以上,所以第一步是检查项目中的Java版本是否至少是17,并升级JDK。 接下来,修改项目的pom.xml文件,将Spring Boot的版本号改为3.0.0或更高。同时,Spring Boot 3.0对应的Spring Framework版本是6.0,因此可能需要更新相关的依赖项。例如,Spring Security可能会有版本变化,需要对应升级到6.x版本。 另一个关键点是依赖库的兼容性检查。例如,MyBatis的Spring Boot Starter可能需要升级到3.0以上版本。此外,像Druid数据库连接池、PageHelper分页插件等第三方库也需要确认是否支持Spring Boot 3.0。如果有不兼容的情况,可能需要寻找替代库或等待更新。 Jakarta EE的包名变化也是一个重要问题。Spring Boot 3.0将javax替换为jakarta,所以所有涉及到javax.persistence、javax.servlet等的地方都需要替换为jakarta下的相应包。这可能需要批量替换导入语句,或者使用IDE的全局替换功能。 配置文件的调整可能包括安全配置JPA配置的变化。例如,Spring Security 6.0中的一些配置类或方法可能已被弃用或修改,需要根据新的文档进行调整。同时,数据库驱动类名在Spring Boot 3中可能有变化,比如MySQL的驱动类名可能从com.mysql.cj.jdbc.Driver调整为新的格式,需要检查并更新application.yml中的配置。 代码层面的修改可能涉及废弃API的替换。例如,Hibernate 6.x中某些方法可能不再使用,需要查找并替换为新的方法。此外,单元测试中使用的JUnit版本可能需要升级到JUnit 5,并调整测试注解断言方法。 升级过程中可能会遇到各种编译错误运行时异常,需要逐步解决。例如,升级后启动项目时出现ClassNotFoundException或NoSuchMethodError,可能是由于依赖版本不匹配,需要检查并调整依赖版本。同时,注意日志中的错误信息,按照提示进行修复。 测试阶段需要全面覆盖,包括单元测试、集成测试前端功能测试。确保所有接口正常响应,权限控制生效,数据库操作无误。前端部分如果使用了Vue,可能不需要太多改动,但要确保后端API的变更不会影响前端调用。 最后,参考官方文档社区资源非常重要。Spring Boot 3的迁移指南、Ruoyi社区的讨论帖、以及GitHub上的Issues都可能提供有用的解决方案。如果遇到无法解决问题,可以在这些地方寻求帮助。</think>将 Ruoyi-Vue 升级到 Spring Boot 3 需分步骤处理兼容性问题,以下是详细流程: --- ### **1. 环境准备** - **JDK 版本升级**:Spring Boot 3 要求 Java 17+,需安装 JDK 17 并配置环境变量。 - **IDE 支持**:确保 IntelliJ IDEA 或 Eclipse 支持 Java 17 语法。 --- ### **2. 修改依赖版本** 在 `ruoyi/pom.xml` 中更新 Spring Boot 版本: ```xml <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.0.0</version> <!-- 或最新版本 --> </parent> ``` 同时更新相关依赖: - Spring Security 升级到 6.0+ - MyBatis Spring Boot Starter 升级到 3.0+ - 其他依赖如 `druid-spring-boot-starter`、`pagehelper-spring-boot-starter` 需兼容 Spring Boot 3[^1]。 --- ### **3. Jakarta EE 包替换** 全局替换 `javax.*` 为 `jakarta.*`,例如: - `javax.servlet` → `jakarta.servlet` - `javax.persistence` → `jakarta.persistence` 可通过 IDE 的 **Replace in Path** 功能批量操作。 --- ### **4. 配置文件调整** - **数据库驱动类名**:在 `application.yml` 中修改: ```yaml spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/ry_vue?useSSL=false ``` - **安全配置**:Spring Security 6 默认启用 CSRF,若需禁用,需显式配置: ```java @Configuration public class SecurityConfig { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.csrf().disable(); return http.build(); } } ``` --- ### **5. 代码适配** - **JPA/Hibernate**:检查实体类注解是否兼容 Jakarta EE。 - **废弃 API**:例如 `SpringExtension` 在 JUnit 5 中需替换为 `@ExtendWith`。 - **Web 层**:若使用 `Servlet API`,需确保导入 `jakarta.servlet.http.HttpServletRequest`。 --- ### **6. 测试与调试** - **编译错误**:优先解决依赖冲突(使用 `mvn dependency:tree` 分析)。 - **权限问题**:Spring Security 6 的权限表达式语法可能变化,需检查 `@PreAuthorize` 注解。 - **前端联调**:确保接口路径参数格式与 Vue 前端匹配。 --- ### **参考资源** - [Spring Boot 3 迁移指南](https://spring.io/projects/spring-boot#overview)[^2] - [Ruoyi 社区讨论帖](https://gitee.com/y_project/RuoYi-Vue/issues) ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值