实体类父类:
package com.byx.communitycontrol.common.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class BaseEntity {
/**
* 创建人
*/
@TableField(value = "CREATEDBY", fill = FieldFill.INSERT)
private String createdBy;
/**
* 创建时间
*/
@TableField(value = "CREATEDTIME", fill = FieldFill.INSERT)
private LocalDateTime createdTime;
/**
* 更新人
*/
@TableField(value = "UPDATEDBY", fill = FieldFill.INSERT_UPDATE)
private String updatedBy;
/**
* 更新时间
*/
@TableField(value = "UPDATEDTIME", fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updatedTime;
}
@TableLogic
框架提供的逻辑删除注解。
配合以下配置一起使用:
mybatis-plus.configuration.global-config.db-config.logic-delete-value=1 ##字段值为1时 表示逻辑删除
mybatis-plus.configuration.global-config.db-config.logic-delete-value=0 ##字段值为0时 表示未删除
当字段添加上@TableLogic后 框架在生成sql模板时 自动在后面添加上逻辑删除字段=0(配置文件中的配置) 的查询条件@TableField
该注解用于标识非主键的字段。
存在多个属性,各个属性的用法如下:
value :指定映射的数据库字段名
el:映射为原生 #{ … } 逻辑,相当于写在 xml 里的 #{ … } 部分。新版本已经没有el表达式了
exist:是否为数据库表字段,默认为 true。
condition:字段 where 实体查询比较条件,有值设置则按设置的值为准,没有则为默认全局的 %s=#{%s}。
update:字段 update set 部分注入,例如:update=“%s+1”:表示更新时会 set version=version+1(该属性优先级高于 el 属性)。
fill:字段自动填充策略,默认为 FieldFill.DEFAULT。
… 其他的自己去官网看…本文主要用到 fill的自动填充策略
配置类:
package com.byx.communitycontrol.context.helper;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.byx.communitycontrol.common.entity.BaseEntity;
import com.byx.communitycontrol.context.user.JwtUser;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.Objects;
@Component
public class BaseEntityConfig implements MetaObjectHandler {
/**
* 使用mp做添加操作时候,这个方法执行
*
* @param metaObject 元对象
*/
@Override
public void insertFill(MetaObject metaObject) {
//this.setFieldValByName("createdTime", LocalDateTime.now(), metaObject);
//this.setFieldValByName("updatedTime", LocalDateTime.now(), metaObject);
if (Objects.nonNull(metaObject) && metaObject.getOriginalObject() instanceof BaseEntity) {
BaseEntity baseEntity = (BaseEntity) metaObject.getOriginalObject();
LocalDateTime now = LocalDateTime.now();
// 创建时间为空,则以当前时间为插入时间
if (Objects.isNull(baseEntity.getCreatedTime())) {
baseEntity.setCreatedTime(now);
}
// 更新时间为空,则以当前时间为更新时间
if (Objects.isNull(baseEntity.getUpdatedTime())) {
baseEntity.setUpdatedTime(now);
}
// 此处写获取用户及用户名的业务代码
JwtUser user = WebAppContextHelper.getUser();
// 当前登录用户不为空,创建人为空,则当前登录用户为创建人
if (Objects.nonNull(user) && Objects.isNull(baseEntity.getCreatedBy())) {
baseEntity.setCreatedBy(user.getUsername());
}
// 当前登录用户不为空,更新人为空,则当前登录用户为更新人
if (Objects.nonNull(user) && Objects.isNull(baseEntity.getUpdatedBy())) {
baseEntity.setUpdatedBy(user.getUsername());
}
}
}
/**
* 使用mp做修改操作时候,这个方法执行
*
* @param metaObject 元对象
*/
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updatedTime", LocalDateTime.now(), metaObject);
// 此处写获取用户及用户名的业务代码
JwtUser user = WebAppContextHelper.getUser();
this.setFieldValByName("updatedBy", user.getUsername(), metaObject);
}
}
子类:
package com.byx.communitycontrol.common.entity.liveService;
import com.baomidou.mybatisplus.annotation.*;
import com.byx.communitycontrol.common.entity.BaseEntity;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.apache.ibatis.type.JdbcType;
import java.time.LocalDateTime;
@Data
@EqualsAndHashCode(callSuper = false)
@TableName(value = "X_LIFEINFORMATION")
@KeySequence(value = "SEQ_X_LIFEINFORMATION")
public class LifeInformation extends BaseEntity {
@TableId(value = "ID", type = IdType.INPUT)
private Integer id;
/**
* 作者
*/
@TableField(value = "AUTHOR")
private String author;
/**
* 标题
*/
@TableField(value = "TITLE")
private String title;
/**
* 封面
*/
@TableField(value = "COVER", updateStrategy = FieldStrategy.IGNORED, jdbcType = JdbcType.VARCHAR)
private String cover;
/**
* 摘要
*/
@TableField(value = "SUMMARY", updateStrategy = FieldStrategy.IGNORED, jdbcType = JdbcType.VARCHAR)
private String summary;
/**
* 内容
*/
@TableField(value = "CONTENT", updateStrategy = FieldStrategy.IGNORED, jdbcType = JdbcType.VARCHAR)
private String content;
/**
* 发布时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@TableField(value = "PUBLISHTIME")
private LocalDateTime publishTime;
/**
* 图片
*/
@TableField(value = "PICS", updateStrategy = FieldStrategy.IGNORED, jdbcType = JdbcType.VARCHAR)
private String pics;
/**
* 附件
*/
@TableField(value = "ATTACHMENTS", updateStrategy = FieldStrategy.IGNORED, jdbcType = JdbcType.VARCHAR)
private String attachments;
/**
* 状态
*/
@TableField(value = "STATUS")
private Integer status;
/**
* 类型
*/
@TableField(value = "TYPE")
private String type;
}