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();
}
}
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());
}
}
}