ruoyi mybatis-plus版 ------------------ ### 改造 #### 依赖配置 > 1. [pom.xml](pom.xml) ```xml 3.5.5 com.baomidou mybatis-plus-boot-starter ${mybatis-plus.version} ``` > 2.增加mybatis-plus [ruoyi-admin/pom.xml](ruoyi-admin/pom.xml) ```xml com.github.pagehelper pagehelper-spring-boot-starter mybatis org.mybatis com.baomidou mybatis-plus-boot-starter ``` #### 代码改修 > 1.关掉mybatis的配置 [MyBatisConfig.java](ruoyi-framework/src/main/java/com/ruoyi/framework/config/MyBatisConfig.java) ```java @Configuration @ConditionalOnProperty(name = "ruoyi.mybatis.enable", matchIfMissing = false) public class MyBatisConfig ``` > 2.追加mybatisPlus的配置,覆盖mybatis的配置: [MybatisPlusConfig.java](ruoyi-admin/src/main/java/com/ruoyi/web/core/config/MybatisPlusConfig.java)
点我展开看代码

package com.ruoyi.web.core.config;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;

/**
 * MybatisPlus 配置文件
 *
 * @author maxf
 * @version 1.0
 * @ClassName MybatisPlusConfig
 * @Description
 * @date 2018/12/13 11:34
 */
//Spring boot方式
@EnableTransactionManagement
@Configuration
public class MybatisPlusConfig {
    /**
     * 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题(该属性会在旧插件移除后一同移除)
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        //新的分页插件
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        //乐观锁插件
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return interceptor;
    }

    @Bean
    @ConditionalOnMissingBean
    public MetaObjectHandler metaObjectHandler() {
        return new MplusMetaObjectHandler();
    }

    /**
     * 注入sql注入器
     */
    @Bean
    @ConditionalOnMissingBean
    public DefaultSqlInjector sqlInjector() {
        return new DefaultSqlInjector();
    }

}
>公共字段的自动填充处理(1):[BaseEntity.java](ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseEntity.java) ```java /** 搜索值 该字段数据库不需要*/ @TableField(exist = false) @JsonIgnore private String searchValue; /** 创建者 新增时自动填充*/ @TableField(fill = FieldFill.INSERT) private String createBy; /** 创建时间 新增时自动填充*/ @TableField(fill = FieldFill.INSERT) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createTime; /** 更新者 新增和修改时自动填充*/ @TableField(fill = FieldFill.INSERT_UPDATE) private String updateBy; /** 更新时间 新增和修改时自动填充*/ @TableField(fill = FieldFill.INSERT_UPDATE) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date updateTime; /** 备注 */ private String remark; /** 请求参数 该字段数据库不需要*/ @TableField(exist = false) @JsonInclude(JsonInclude.Include.NON_EMPTY) private Map params; ``` >公共字段的自动填充处理(2): [MplusMetaObjectHandler.java](ruoyi-admin/src/main/java/com/ruoyi/web/core/config/MplusMetaObjectHandler.java)
点我展开看代码

package com.ruoyi.web.core.config;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;

import java.util.Date;

/**
* 注入公共字段自动填充,任选注入方式即可
* 

* 继承使用 *

*

* 继承后重写 {@link #getOperator()}重新注入 Bean *

*
*     @author yexuejc
* @Bean
*     public MyMetaObjectHandler metaObjectHandler() {
*         return new MyMetaObjectHandler();
*     }
* 
*/ public class MplusMetaObjectHandler implements MetaObjectHandler { /** * 创建时间 */ protected String crtTimeColumn = "createTime"; /** * 创建人 */ protected String crtByColumn = "createBy"; /** * 最后操作时间 */ protected String updateTimeColumn = "updateTime"; /** * 最后操作人 */ protected String updateByColumn = "updateBy"; /** * 设置操作者 *

* 应设置登录账号为操作者,这里由每个工程具体实现 *

*

* 返回null时,会查找consumerId作为操作者,找不到会设置默认值 *
* 返回"" 时,会存"" *

* * @return */ protected String getOperator() { return ""; } @Override public void insertFill(MetaObject metaObject) { Object crtTime = metaObject.getValue(crtTimeColumn); if (crtTime == null) { this.strictInsertFill(metaObject, crtTimeColumn, Date.class, new Date()); } Object crtBy = metaObject.getValue(crtByColumn); if (crtBy == null) { this.strictInsertFill(metaObject, crtByColumn, String.class, getOperator()); } Object mdfyTime = metaObject.getValue(updateTimeColumn); if (mdfyTime == null) { this.strictInsertFill(metaObject, updateTimeColumn, Date.class, new Date()); } Object mdfyBy = metaObject.getValue(updateByColumn); if (mdfyBy == null) { this.strictInsertFill(metaObject, updateByColumn, String.class, getOperator()); } } @Override public void updateFill(MetaObject metaObject) { Object mdfyTime = metaObject.getValue(updateTimeColumn); if (mdfyTime == null) { this.strictInsertFill(metaObject, updateTimeColumn, Date.class, new Date()); } Object mdfyBy = metaObject.getValue(updateByColumn); if (mdfyBy == null) { this.strictInsertFill(metaObject, updateByColumn, String.class, getOperator()); } } }
> 4.自动获取操作者的实现(需要注入为bean): [RuoyiMetaObjectHandler.java](ruoyi-admin/src/main/java/com/ruoyi/web/core/config/RuoyiMetaObjectHandler.java) ``` package com.ruoyi.web.core.config; import com.ruoyi.common.utils.SecurityUtils; /** * @author: yexuejc * @date: 2020-10-13 15:25:28 */ public class RuoyiMetaObjectHandler extends MplusMetaObjectHandler { @Override protected String getOperator() { return SecurityUtils.getUsername(); } } ``` #### 配置 > mybatis的配置改为mybatis-plus的配置:ruoyi-admin/src/main/resources/application.yml ```properties # MyBatis配置(plus) mybatis-plus: # 搜索指定包别名 typeAliasesPackage: com.ruoyi.**.domain # 配置mapper的扫描,找到所有的mapper.xml映射文件 mapperLocations: classpath*:mapper/**/*Mapper.xml # 加载全局的配置文件 configLocation: classpath:mybatis/mybatis-config.xml ``` ### 多出的功能 * [mybatis-plus-test](mybatis-plus-test) 集成mybatis-plus后的测试demo > 先创建demo表,[init.sql](mybatis-plus-test/src/main/resources/init.sql);执行参照[UserOrderServiceTest.java](mybatis-plus-test/src/test/java/com/ruoyi/mp/service/UserOrderServiceTest.java)