Mybatis-Plus查詢中如何排除標識字段
一、查詢中排除標識字段
1.1 測試查詢
@Test public void findAllTest() { List<User> userList = userMapper.selectList(null); userList.forEach(System.out::println); }
1.2 實體類字段不添加@TableField註解
//邏輯刪除註解(0 未刪除 1 已刪除) @TableLogic /*@TableField(select = false)*/ private Boolean isDeleted;
在沒有加註解的情況下,is_deleted在查詢中存在
Preparing: SELECT id,name,email,age,status,is_deleted,version FROM user WHERE is_deleted=0
1.3 實體類字段添加@TableField註解
//邏輯刪除註解(0 未刪除 1 已刪除) @TableLogic @TableField(select = false) private Boolean isDeleted;
在加註解的情況下,is_deleted在查詢中不存在
Preparing: SELECT id,name,email,age,status,version FROM user WHERE is_deleted=0
二、查詢中排除標識字段,自定義方法時需要註意
比如:自定義,查詢年齡大於xxx歲的,返回list集合
@Test public void mySelectTest() { // 查詢年齡大於xxx歲的 List<User> userList = userMapper.mySelectList(Wrappers.<User>lambdaQuery() .gt(User::getAge,1)); userList.forEach(System.out::println); }
@Select("select * from user ${ew.customSqlSegment}") List<User> mySelectList(@Param(Constants.WRAPPER) Wrapper<User> wrapper);
此時查看控制臺打印結果:
@TableField(select = false)該註解對於自定義方法查詢失效瞭,怎麼做呢?加限定條件
// 查詢年齡大於xxx歲的 List<User> userList = userMapper.mySelectList(Wrappers.<User>lambdaQuery() .gt(User::getAge,1).eq(User::getIsDeleted,0));
三、@TableField註解其他用法
Mybatis-plus使用註解 @TableField(exist = false) 註明非數據庫字段屬性
@TableField(exist = false)
註解加載bean屬性上,表示當前屬性不是數據庫的字段,但在項目中必須使用,這樣在新增等使用bean的時候,mybatis-plus就會忽略這個,不會報錯
Mybatis-Plus排除自定義字段不查詢
需求原因
由於數據庫表設計為一張為組表
一張為對應組下的參數表
在查詢數據時想要在查詢組表的同時吧對應組下的數據頁同時查出來
所以在組實體類下增加瞭一個對應的參數來接受對應的組數據
錯誤截圖
錯誤分析
根據查詢語句來看
條件查詢默認把所有字段都查出來瞭
但由於自定義的字段在數據庫中不存在,所以報錯
嘗試
這裡最大的問題就是如何把自定義字段排除掉,在網上搜瞭一圈,
最後才在Mybatis-plus的官方文檔裡發現
@TableFiled有一個exist屬性,是用來定義字段是否為數據庫表字段的。。。。
於是把該屬性加上
重新運行
完美解決!
結論
有問題下次先看官方文檔吧,以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet
推薦閱讀:
- MyBatis-Plus實現邏輯刪除的示例代碼
- mybatis plus實現條件查詢
- MyBatis-Plus 條件查詢器的實現
- 對Mybatis Plus中@TableField的使用正解
- MyBatis-Plus樂觀鎖插件的用法小結