8.4 KiB
ruoyi mybatis-plus版
改造
依赖配置
<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
多出的功能
- mybatis-plus-test 集成mybatis-plus后的测试demo
先创建demo表,init.sql;执行参照UserOrderServiceTest.java