ruoyi-vue-x/update.md

8.4 KiB
Raw Permalink Blame History

ruoyi mybatis-plus版

改造

依赖配置

  1. pom.xml
<mybatis-plus.version>3.5.5</mybatis-plus.version>
<!--mybatis-plus配置适配SpringBoot2-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>${mybatis-plus.version}</version>
</dependency>

2.增加mybatis-plus ruoyi-admin/pom.xml

<!-- pagehelper 分页插件 -->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <exclusions>
        <!--移除mybatis的依赖-->
        <exclusion>
            <artifactId>mybatis</artifactId>
            <groupId>org.mybatis</groupId>
        </exclusion>
    </exclusions>
</dependency>

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

代码改修

1.关掉mybatis的配置 MyBatisConfig.java

@Configuration
@ConditionalOnProperty(name = "ruoyi.mybatis.enable", matchIfMissing = false)
public class MyBatisConfig

2.追加mybatisPlus的配置覆盖mybatis的配置 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

    /** 搜索值 该字段数据库不需要*/
    @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<String, Object> params;

公共字段的自动填充处理(2) 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

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

# MyBatis配置(plus)
mybatis-plus:
  # 搜索指定包别名
  typeAliasesPackage: com.ruoyi.**.domain
  # 配置mapper的扫描找到所有的mapper.xml映射文件
  mapperLocations: classpath*:mapper/**/*Mapper.xml
  # 加载全局的配置文件
  configLocation: classpath:mybatis/mybatis-config.xml

多出的功能

先创建demo表init.sql;执行参照UserOrderServiceTest.java