目录
步骤2:编写MPBaseEntity类实现Serializable,代码如下
在Java项目中使用Mybatis-Plus时,对数据库中的公共字段进行填充处理。
步骤1:编写填充字段的规则
编写填充字段的规则MyMetaObjectHandler类,需要继承自MetaObjectHandler,填充的规则有多种,下面提供我自己的(也是参考别人的写的)
package com.stu.framework.config.mybatitsPlus;
import com.stu.student.utils.DateFormatUtil;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.stu.common.utils.ShiroUtils;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.reflection.SystemMetaObject;
import java.util.Date;
/**
* 自动填充的字段处理
* 字段上方需要添加@TableField注解
*/
public class MyMetaObjectHandler implements MetaObjectHandler {
/**
* 创建时间
*/
private static final String CREATE_TIME = "createTime";
/**
* 修改时间
*/
private static final String UPDATE_TIME = "updateTime";
/**
* 创建人
*/
private static final String CREATE_BY = "createBy";
/**
* 修改时间
*/
private static final String UPDATE_BY = "updateBy";
@Override
public void insertFill(MetaObject metaObject) {
String createTime = this.getTypeName(CREATE_TIME, metaObject);
if (Date.class.getTypeName().equals(createTime)) {
this.setFieldValByName(CREATE_TIME, new Date(), metaObject);
} else if (String.class.getTypeName().equals(createTime)) {
this.setFieldValByName(CREATE_TIME, DateFormatUtil.getDateNow(), metaObject);
}
String updateTime = this.getTypeName(UPDATE_TIME, metaObject);
if (Date.class.getTypeName().equals(updateTime)) {
this.setFieldValByName(UPDATE_TIME, new Date(), metaObject);
} else if (String.class.getTypeName().equals(updateTime)) {
this.setFieldValByName(UPDATE_TIME, DateFormatUtil.getDateNow(), metaObject);
}
String createBy = this.getTypeName(CREATE_BY, metaObject);
if (String.class.getTypeName().equals(createBy)){
this.setFieldValByName(CREATE_BY, ShiroUtils.getLoginName(), metaObject);
}
String updateBy = this.getTypeName(UPDATE_BY, metaObject);
if (String.class.getTypeName().equals(updateBy)){
this.setFieldValByName(UPDATE_BY, ShiroUtils.getLoginName(), metaObject);
}
}
@Override
public void updateFill(MetaObject metaObject) {
String updateTime = this.getTypeName(UPDATE_TIME, metaObject);
if (Date.class.getTypeName().equals(updateTime)) {
this.setFieldValByName(UPDATE_TIME, new Date(), metaObject);
} else if (String.class.getTypeName().equals(updateTime)) {
this.setFieldValByName(UPDATE_TIME, DateFormatUtil.getDateNow(), metaObject);
}
String updateBy = this.getTypeName(UPDATE_BY, metaObject);
if (String.class.getTypeName().equals(updateBy)){
this.setFieldValByName(UPDATE_BY, ShiroUtils.getLoginName(), metaObject);
}
}
private String getTypeName(String fieldName, MetaObject metaObject) {
if (metaObject.hasSetter(fieldName) && metaObject.hasGetter(fieldName)) {
return metaObject.getGetterType(fieldName).getTypeName();
} else if (metaObject.hasGetter(Constants.ENTITY)) {
Object et = metaObject.getValue(Constants.ENTITY);
if (et != null) {
MetaObject etMeta = SystemMetaObject.forObject(et);
if (etMeta.hasSetter(fieldName)) {
return etMeta.getGetterType(fieldName).getTypeName();
}
}
}
return "";
}
}
步骤2:编写MPBaseEntity类实现Serializable,代码如下
package com.stu.common.core.domain;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* Entity基类
*
* @author yanbei
*/
public class MPBaseEntity implements Serializable
{
private static final long serialVersionUID = 1L;
/** 搜索值 */
@TableField(exist = false)
private String searchValue;
/** 创建者 */
@TableField(fill = FieldFill.INSERT)
private String createBy;
/** 创建时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@TableField(fill = FieldFill.INSERT)
private Date createTime;
/** 更新者 */
@TableField(fill = FieldFill.INSERT_UPDATE)
private String updateBy;
/** 更新时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
/** 备注 */
private String remark;
/** 请求参数 */
@TableField(exist = false)
private Map<String, Object> params;
public String getSearchValue()
{
return searchValue;
}
public void setSearchValue(String searchValue)
{
this.searchValue = searchValue;
}
public String getCreateBy()
{
return createBy;
}
public void setCreateBy(String createBy)
{
this.createBy = createBy;
}
public Date getCreateTime()
{
return createTime;
}
public void setCreateTime(Date createTime)
{
this.createTime = createTime;
}
public String getUpdateBy()
{
return updateBy;
}
public void setUpdateBy(String updateBy)
{
this.updateBy = updateBy;
}
public Date getUpdateTime()
{
return updateTime;
}
public void setUpdateTime(Date updateTime)
{
this.updateTime = updateTime;
}
public String getRemark()
{
return remark;
}
public void setRemark(String remark)
{
this.remark = remark;
}
public Map<String, Object> getParams()
{
if (params == null)
{
params = new HashMap<>();
}
return params;
}
public void setParams(Map<String, Object> params)
{
this.params = params;
}
}
步骤3:实体类继承MPBaseEntity
例如:StudentUser extends MPBaseEntity
注意
在使用的过程中要注意自己所需要的填充策略,我个人在MPBaseEntity类中将updateTime和updateBy填充策略设置为:新增和修改。即在执行插入的sql操作时,也会对这两个字段进行填充,若不要填充,可以改为@TableField(fill = FieldFill.UPDATE)。