mybatis-plus 查詢時排除字段方法的兩種方法
我們在開發(fā)應用時,在某些應用場景下查詢有時需要排除某些字段,mybatis-plus主要提供了以下兩種方式
1.通過@TableField()
1.1準備User類
@Data public class User extends Model<User> { private Long id; private String name; private Integer age; private String email; @TableField(exist = false) private int deleted; }
1.2 測試方法
@Test public void testQueryPage(){ QueryWrapper<User> wrapper= new QueryWrapper<User>(); wrapper.ne("age",200) ; Page<User> page= new Page<User>(6,20,true); IPage<User> iPage= userMapper.selectPage(page,wrapper); System.out.println("總頁數(shù):"+iPage.getPages()+",總記錄數(shù):"+iPage.getTotal()+",當前頁:"+iPage.getCurrent()); List<User> users= iPage.getRecords(); users.forEach(System.out::println); }
1.3測試結果
2022-10-10 11:18:10.901 DEBUG 23728 --- [ main] c.m.s.mapper.UserMapper.selectPage : ==> Preparing: SELECT id,name,age,email FROM user WHERE (age <> ?) LIMIT ?,?
2022-10-10 11:18:10.901 DEBUG 23728 --- [ main] c.m.s.mapper.UserMapper.selectPage : ==> Parameters: 200(Integer), 100(Long), 20(Long)
2022-10-10 11:18:10.911 DEBUG 23728 --- [ main] c.m.s.mapper.UserMapper.selectPage : <== Total: 14
2.通過querywrapper中的select方法來排除
2.1.具體方法內容:
public QueryWrapper<T> select(Class<T> entityClass, Predicate<TableFieldInfo> predicate) { super.setEntityClass(entityClass); this.sqlSelect.setStringValue(TableInfoHelper.getTableInfo(this.getEntityClass()).chooseSelect(predicate)); return (QueryWrapper)this.typedThis; }
2.2.這里的Predicate接口有一個關鍵方法,也就意味著test方法返回ture才會展現(xiàn)這個
/** * Evaluates this predicate on the given argument. * * @param t the input argument * @return {@code true} if the input argument matches the predicate, * otherwise {@code false} */ boolean test(T t);
下面我們來按排這個方法來準備
2.3 準備User類
@Data public class User extends Model<User> { private Long id; private String name; private Integer age; private String email; private int deleted; }
2.4 準備測方法
@Test public void testQueryPage(){ QueryWrapper<User> wrapper= new QueryWrapper<User>(); wrapper.ne("age",200).select(User.class,info -> !info.getColumn().equals("deleted")); Page<User> page= new Page<User>(6,20,true); IPage<User> iPage= userMapper.selectPage(page,wrapper); System.out.println("總頁數(shù):"+iPage.getPages()+",總記錄數(shù):"+iPage.getTotal()+",當前頁:"+iPage.getCurrent()); List<User> users= iPage.getRecords(); users.forEach(System.out::println); }
2.5運行l(wèi)og
2022-10-10 11:22:04.720 DEBUG 20580 --- [ main] c.m.s.m.UserMapper.selectPage_mpCount : ==> Preparing: SELECT COUNT(*) AS total FROM user WHERE deleted = 0 AND (age <> ?)
2022-10-10 11:22:04.750 DEBUG 20580 --- [ main] c.m.s.m.UserMapper.selectPage_mpCount : ==> Parameters: 200(Integer)
2022-10-10 11:22:04.780 DEBUG 20580 --- [ main] c.m.s.m.UserMapper.selectPage_mpCount : <== Total: 1
2022-10-10 11:22:04.791 DEBUG 20580 --- [ main] c.m.s.mapper.UserMapper.selectPage : ==> Preparing: SELECT id,name,age,email FROM user WHERE deleted=0 AND (age <> ?) LIMIT ?,?
2022-10-10 11:22:04.792 DEBUG 20580 --- [ main] c.m.s.mapper.UserMapper.selectPage : ==> Parameters: 200(Integer), 100(Long), 20(Long)
2022-10-10 11:22:04.796 DEBUG 20580 --- [ main] c.m.s.mapper.UserMapper.selectPage : <== Total: 13
總頁數(shù):6,總記錄數(shù):113,當前頁:6
User(id=197, name=zouli197, age=227, email=zoulinlin197@163.com, deleted=0)
User(id=198, name=zouli198, age=228, email=zoulinlin198@163.com, deleted=0)
User(id=199, name=zouli199, age=229, email=zoulinlin199@163.com, deleted=0)
User(id=310, name=zouli10, age=40, email=zoulinlin10@163.com, deleted=0)
如果沒有按照上面說明的方式來進行,正常測試log會有deleted字段查詢
2022-10-10 11:24:33.069 DEBUG 18760 --- [ main] c.m.s.m.UserMapper.selectPage_mpCount : ==> Preparing: SELECT COUNT(*) AS total FROM user WHERE deleted = 0 AND (age <> ?)
2022-10-10 11:24:33.089 DEBUG 18760 --- [ main] c.m.s.m.UserMapper.selectPage_mpCount : ==> Parameters: 200(Integer)
2022-10-10 11:24:33.119 DEBUG 18760 --- [ main] c.m.s.m.UserMapper.selectPage_mpCount : <== Total: 1
2022-10-10 11:24:33.129 DEBUG 18760 --- [ main] c.m.s.mapper.UserMapper.selectPage : ==> Preparing: SELECT id,name,age,email,deleted FROM user WHERE deleted=0 AND (age <> ?) LIMIT ?,?
2022-10-10 11:24:33.129 DEBUG 18760 --- [ main] c.m.s.mapper.UserMapper.selectPage : ==> Parameters: 200(Integer), 100(Long), 20(Long)
2022-10-10 11:24:33.129 DEBUG 18760 --- [ main] c.m.s.mapper.UserMapper.selectPage : <== Total: 13
總頁數(shù):6,總記錄數(shù):113,當前頁:6
User(id=197, name=zouli197, age=227, email=zoulinlin197@163.com, deleted=0)
到此這篇關于mybatis-plus 查詢時排除字段方法的兩種方法的文章就介紹到這了,更多相關mybatis-plus 查詢排除字段內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
java智能問答圖靈機器人AI接口(聚合數(shù)據(jù))
這篇文章主要介紹了java智能問答圖靈機器人AI接口(聚合數(shù)據(jù)),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-02-02Spring?Boot統(tǒng)一處理全局異常的實戰(zhàn)教程
最近在做項目時需要對異常進行全局統(tǒng)一處理,所以下面這篇文章主要給大家介紹了關于Spring?Boot統(tǒng)一處理全局異常的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2021-12-12Java調度線程池ScheduledThreadPoolExecutor不執(zhí)行問題分析
最近項目上反饋某個重要的定時任務突然不執(zhí)行了,很頭疼,開發(fā)環(huán)境和測試環(huán)境都沒有出現(xiàn)過這個問題。定時任務采用的是ScheduledThreadPoolExecutor,后來一看代碼發(fā)現(xiàn)踩了一個大坑。本文就來和大家聊聊這次的踩坑記錄與解決方法,需要的可以參考一下2023-03-03springboot多數(shù)據(jù)源配置及切換的示例代碼詳解
這篇文章主要介紹了springboot多數(shù)據(jù)源配置及切換,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09Java實戰(zhàn)項目之斗地主和斗牛游戲的實現(xiàn)
讀萬卷書不如行萬里路,只學書上的理論是遠遠不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Java實現(xiàn)一個斗地主和一個斗牛游戲,大家可以在過程中查缺補漏,提升水平2021-11-11詳解SpringBoot中@ConditionalOnClass注解的使用
這篇文章主要和大家詳細介紹一下springboot中@ConditionalOnClass注解的用法,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下2022-08-08