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

推薦閱讀: