場景
官方文檔:
字段注解 @tablefield
1
|
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)
的字段在進行插入和更新時進行自動填充。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
/** * 創建人 */ @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
并重寫其方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
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注解 自動賦值功能的配置類
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
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注解完成自動填充賦值使用 案例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
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; } |
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。如有錯誤或未考慮完全的地方,望不吝賜教。
原文鏈接:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/89450006