MyBatis-Puls插入或修改时某些字段自动填充操作示例
作者:不语
这篇文章主要为大家介绍了MyBatis-Puls插入或修改时某些字段自动填充操作示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
介绍
在开发中,某些字段需要在插入或修改时自动被填充进数据库,如创建者,修改者等。
MyBatis-Puls提供了 MetaObjectHandler 接口,通过重写其中的 insertFill 与 updateFill 方法,实现在 新增 or 修改 时 动态的拿到实体类,在向实体类中 set 数据完成每次 新增或修改时自动填充数据 如 创建者、修改者这种数据在实体类上加注解 @TableField(fill = FieldFill.XXXXXX) 选择进入insert时填充还是update时填充,还是都填充
样例
Handler实现类
/** * MP注入处理器 * * @author * @date 2021/4/25 */ @Slf4j public class CreateAndUpdateMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { try { if (ObjectUtil.isNotNull(metaObject) && metaObject.getOriginalObject() instanceof BaseEntity) { BaseEntity baseEntity = (BaseEntity) metaObject.getOriginalObject();//获得当前要进行sql操作的实体类 Date current = ObjectUtil.isNotNull(baseEntity.getCreateTime()) ? baseEntity.getCreateTime() : new Date(); baseEntity.setCreateTime(current); baseEntity.setUpdateTime(current); String username = StringUtils.isNotBlank(baseEntity.getCreateBy()) ? baseEntity.getCreateBy() : getLoginUsername(); // 当前已登录 且 创建人为空 则填充 baseEntity.setCreateBy(username); // 当前已登录 且 更新人为空 则填充 baseEntity.setUpdateBy(username); } } catch (Exception e) { throw new ServiceException("自动注入异常 => " + e.getMessage(), HttpStatus.HTTP_UNAUTHORIZED); } } @Override public void updateFill(MetaObject metaObject) { try { if (ObjectUtil.isNotNull(metaObject) && metaObject.getOriginalObject() instanceof BaseEntity) { BaseEntity baseEntity = (BaseEntity) metaObject.getOriginalObject();//获得当前要进行sql操作的实体类 Date current = new Date(); // 更新时间填充(不管为不为空) baseEntity.setUpdateTime(current); String username = getLoginUsername(); // 当前已登录 更新人填充(不管为不为空) if (StringUtils.isNotBlank(username)) { baseEntity.setUpdateBy(username); } } } catch (Exception e) { throw new ServiceException("自动注入异常 => " + e.getMessage(), HttpStatus.HTTP_UNAUTHORIZED); } } /** * 获取登录用户名 */ private String getLoginUsername() { LoginUser loginUser; try { loginUser = LoginHelper.getLoginUser(); } catch (Exception e) { log.warn("自动注入警告 => 用户未登录"); return null; } return ObjectUtil.isNotNull(loginUser) ? loginUser.getUsername() : null; } }
实体类
/** * Entity基类 * * @author */ @Data public class BaseEntity implements Serializable { private static final long serialVersionUID = 1L; /** * 搜索值 */ @JsonIgnore @TableField(exist = false) private String searchValue; /** * 创建者 */ @TableField(fill = FieldFill.INSERT) //创建时自动填充 private String createBy; /** * 创建时间 */ @TableField(fill = FieldFill.INSERT) private Date createTime; /** * 更新者 */ @TableField(fill = FieldFill.INSERT_UPDATE) //创建 or 修改时自动填充 private String updateBy; /** * 更新时间 */ @TableField(fill = FieldFill.INSERT_UPDATE) private Date updateTime; /** * 请求参数 */ @JsonInclude(JsonInclude.Include.NON_EMPTY) @TableField(exist = false) private Map<String, Object> params = new HashMap<>(); }
以上就是MyBatis-Puls插入或修改时某些字段自动填充操作示例的详细内容,更多关于MyBatis Puls插入修改自动填充的资料请关注脚本之家其它相关文章!