在MyBatisPlus中使用@TableField完成字段自動填充的操作
場景
官方文檔:
字段註解 @TableField
com.baomidou.mybatisplus.annotations.TableField
值 | 描述 |
---|---|
value | 字段值(駝峰命名方式,該值可無) |
update | 預處理 set 字段自定義註入 |
condition | 預處理 WHERE 實體條件自定義運算規則 |
el | 詳看註釋說明 |
exist | 是否為數據庫表字段( 默認 true 存在,false 不存在 ) |
strategy | 字段驗證 ( 默認 非 null 判斷,查看 com.baomidou.mybatisplus.enums.FieldStrategy ) |
fill | 字段填充標記 ( FieldFill, 配合自動填充使用 ) |
字段填充策略 FieldFill
值 | 描述 |
---|---|
DEFAULT | 默認不處理 |
INSERT | 插入填充字段 |
UPDATE | 更新填充字段 |
INSERT_UPDATE | 插入和更新填充字段 |
實現
實體類中有如下屬性,通過上面的自動填充屬性,我們可以實現
在進行插入操作時對
添加瞭註解@TableField(fill = FieldFill.INSERT)
的字段進行自動填充。
對添加瞭註解@TableField(fill = FieldFill.INSERT_UPDATE)
的字段在進行插入和更新時進行自動填充。
/** * 創建人 */ @TableField(fill = FieldFill.INSERT) private Long creatorId; /** * 創建時間 */ @TableField(fill = FieldFill.INSERT) private Date gmtCreat; /** * 修改人 */ @TableField(fill = FieldFill.INSERT_UPDATE) private Long modifierId; /** * 修改時間 */ @TableField(fill = FieldFill.INSERT_UPDATE) private Date gmtModified; /** * 是否可用 */ @TableField(fill = FieldFill.INSERT) private Boolean availableFlag;
這樣我們在具體業務中對實體類進行賦值就可以不用對這些公共字段進行賦值,在執行插入或者更新時就能自動賦值並插入數據庫。
那麼要自動賦的值在哪裡配置?
在項目的config包下新建自動填充處理類使其實現接口MetaObjectHandler
並重寫其方法:
package com.ws.api.config; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component; import java.util.Date; /** * 自動填充處理類 * @author badao * @version 1.0 * @see **/ @Component public class MyMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { this.setFieldValByName("modifierId", new Long(111), metaObject); this.setFieldValByName("gmtModified", new Date(), metaObject); this.setFieldValByName("creatorId", new Long(111), metaObject); this.setFieldValByName("gmtCreat",new Date(), metaObject); this.setFieldValByName("availableFlag",true, metaObject); } @Override public void updateFill(MetaObject metaObject) { this.setFieldValByName("modifierId", new Long(111), metaObject); this.setFieldValByName("gmtModified", new Date(), metaObject); } }
其中方法參數中第一個是前面自動填充所對應的字段,第二個是要自動填充的值。
補充:Mybatis-Plus裡 @TableField註解 自動賦值功能的配置類
package com.jt.auto; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component; import java.util.Date; //完成自動填充功能 @Component //將該對象交給spring容器管理 public class MyMetaObjectHandler implements MetaObjectHandler { /** * 在POJO中添加瞭 新增/更新的註解,但是必須在數據庫的字段中完成賦值的操作. * 所以.必須明確,新增/更新時操作的是哪個字段,及值是多少 * * * @param metaObject */ @Override public void insertFill(MetaObject metaObject) { this.setInsertFieldValByName("created", new Date(), metaObject); this.setInsertFieldValByName("updated", new Date(), metaObject); } @Override public void updateFill(MetaObject metaObject) { this.setUpdateFieldValByName("updated", new Date(), metaObject); } }
@TableField註解完成自動填充賦值使用 案例:
package com.jt.pojo; import java.io.Serializable; import java.util.Date; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import lombok.Data; import lombok.experimental.Accessors; //pojo基類,完成2個任務,2個日期,實現序列化 @Data @Accessors(chain=true) public class BasePojo implements Serializable{ @TableField(fill = FieldFill.INSERT) //新增有效 private Date created; @TableField(fill = FieldFill.INSERT_UPDATE) //新增和更新有效 private Date updated; }
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。
推薦閱讀:
- MyBatis-Plus實現字段自動填充功能的示例
- Mybatis-Plus自動填充更新操作相關字段的實現
- MybatisPlus 插入或更新數據時自動填充更新數據解決方案
- Mybatis-Plus實現公共字段自動賦值的方法
- mybatis-plus 新增/修改如何實現自動填充指定字段