0
点赞
收藏
分享

微信扫一扫

Mybatis-plus自动填充starter

dsysama 2023-08-13 阅读 48
javaspring

Mybatis-plus自动填充starter

前言:

上一篇我们说了自动填充,现在利用spring-boot把它抽象为一个组件,可以在项目中共同使用

工具

  • IDEA 2021.1.1
  • MAVEN 3.6.3
  • JDK1.8
  • spring-boot 2.1.3.RELEASE

配置

一、引入依赖

<!-- mybatis-plus start 勿需再引入mybatis依赖了 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.0</version>
</dependency>
<!-- 配置提示 可有可无 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>

二、配置自动填充的字段与启用

package com.ypshengxian.mybatisplus.properties;

import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;

/**
* 描述:自动填充配置
* Created on 2021/7/15 09:34
* @author zjw
*/

@Setter
@Getter
@ConfigurationProperties(prefix = ypsx.mybatis-plus.auto-fill)
public class MybatisPlusAutoFillProperties {
/**
* 是否开启自动填充字段
*/

private Boolean enabled = true;
/**
* 是否开启了插入填充
*/

private Boolean enableInsertFill = true;
/**
* 是否开启了更新填充
*/

private Boolean enableUpdateFill = true;
/**
* 创建时间字段名
*/

private String createTimeField = gmtCreate;
/**
* 更新时间字段名
*/

private String updateTimeField = gmtModified;
}

三、实现元对象处理器接口:MetaObjectHandler

  • 实现元对象处理器接口:com.baomidou.mybatisplus.core.handlers.MetaObjectHandler
package com.ypshengxian.mybatisplus.config;

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

import java.util.Date;

/**
* 描述:自动填充
* Created on 2021/7/14 18:58
* @author zjw
*/

public class MyMetaObjectHandler implements MetaObjectHandler {
private final MybatisPlusAutoFillProperties autoFillProperties;

public MyMetaObjectHandler(MybatisPlusAutoFillProperties autoFillProperties) {
this.autoFillProperties = autoFillProperties;
}

/**
* 是否开启了插入填充
*/

@Override
public boolean openInsertFill() {
return autoFillProperties.getEnableInsertFill();
}

/**
* 是否开启了更新填充
*/

@Override
public boolean openUpdateFill() {
return autoFillProperties.getEnableUpdateFill();
}

/**
* 插入填充,字段为空自动填充
*/

@Override
public void insertFill(MetaObject metaObject) {
Object createTime = getFieldValByName(autoFillProperties.getCreateTimeField(), metaObject);
Object updateTime = getFieldValByName(autoFillProperties.getUpdateTimeField(), metaObject);
if (createTime == null || updateTime == null) {
Date date = new Date();
if (createTime == null) {
setFieldValByName(autoFillProperties.getCreateTimeField(), date, metaObject);
}
if (updateTime == null) {
setFieldValByName(autoFillProperties.getUpdateTimeField(), date, metaObject);
}
}
}

/**
* 更新填充
*/

@Override
public void updateFill(MetaObject metaObject) {
setFieldValByName(autoFillProperties.getUpdateTimeField(), new Date(), metaObject);
}
// // TODO: 2021/7/14 测试?
// @Override
// public void insertFill(MetaObject metaObject) {
// this.strictInsertFill(metaObject, gmtCreate, Date.class, new Date()); // 起始版本 3.3.0(推荐使用)
// this.strictInsertFill(metaObject, gmtModified, Date.class, new Date()); // 起始版本 3.3.0(推荐使用)
// }
//
// @Override
// public void updateFill(MetaObject metaObject) {
// this.strictUpdateFill(metaObject, gmtModified, Date.class, new Date()); // 起始版本 3.3.0(推荐)
// }
}

四、配置AutoConfigure注入 MetaObjectHandler Bean

package com.ypshengxian.mybatisplus.config;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.ypshengxian.mybatisplus.properties.MybatisPlusAutoFillProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;

/**
* 描述:mybatis-plus配置
* Created on 2021/7/15 09:37
* @author zjw
*/

@EnableConfigurationProperties(MybatisPlusAutoFillProperties.class)
public class MybatisPlusAutoConfigure {

@Autowired
private MybatisPlusAutoFillProperties autoFillProperties;


@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty(prefix = ypsx.mybatis-plus.auto-fill, name = enabled, havingValue = true, matchIfMissing = true)
public MetaObjectHandler metaObjectHandler() {
return new MyMetaObjectHandler(autoFillProperties);
}
}

五、默认生效

resources资源文件夹下新建META-INF/spring.factories,内容如下

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.ypshengxian.mybatisplus.config.MybatisPlusAutoConfigure
举报

相关推荐

0 条评论