目的:当数据新增时 create_by 和 update_by 可以根据登陆用户自己填充上数据
实现:利用 Mybatis-Plus的 MetaObjectHandler 类
具体实现:
对应的实体类
@Data
public class Msg extends BaseEntity{
@TableId
private Integer id;
private String title;
private String msg;
private short status;
}
@Data
public class BaseEntity implements Serializable {
@TableField(value = "create_by", fill = FieldFill.INSERT) // 新增执行
private String createBy;
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
@TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE) // 新增和更新执行
private String updateBy;
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
/**
* @Version注解说明:<br>
* 更新时,实体对象的version属性必须有值,才会生成SQL update ... WHERE ... and version=?
*
* 使用 FieldFill.INSERT 不要使用 INSERT_UPDATE 或 update
*/
@Version
@TableField(value="version", fill = FieldFill.INSERT, update="%s+1")
private Long version;
}
Dao
@MapperScan
public interface MsgInterface extends BaseMapper<Msg> {
}
Service
public interface MsgService extends IService<Msg> {
}
ServiceImpl
@Service
public class MsgServiceImpl extends ServiceImpl<MsgInterface, Msg> implements MsgService {
}
Controller
@RestController
public class MsgController {
@Autowired
MsgService msgService;
@RequestMapping("/save")
public void save(Msg msg){
msgService.insert(msg);
}
}
关键点:
/**
* 处理新增和更新的基础数据填充,配合BaseEntity和MyBatisPlusConfig使用
*/
@Component
public class MetaHandler extends MetaObjectHandler {
/**
* 新增数据执行
* @param metaObject
*/
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("createTime", new Date(), metaObject);
this.setFieldValByName("createBy", "admin",metaObject);
this.setFieldValByName("updateTime", new Date(), metaObject);
this.setFieldValByName("updateBy", "admin", metaObject);
Object version = this.getFieldValByName("version", metaObject);
if(null == version){
this.setFieldValByName("version", 0L, metaObject);
}
}
/**
* 更新数据执行
* @param metaObject
*/
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateTime", new Date(), metaObject);
this.setFieldValByName("updateBy", "test",metaObject);
}
}
网上 也有好多 不依赖 mybatis-plus的 ,根据 aop 或者反射 去实现,具体需求具体操作。
参考链接:https://blog.csdn.net/tianmaxingkonger/article/details/84851206