MyBatisPlus 查詢selectOne方法實現
一次偶然間遇到的一個問題,MyBatisPlus 自帶selectOne代碼中查詢出來瞭一條數據,但是在數據庫中查出來瞭多條數據,而代碼中也沒有報錯!好奇之下看瞭源碼才恍然大悟。
public SysFileTemplate findPathByTableName(String tableName) { EntityWrapper<SysFileTemplate> wrapper = new EntityWrapper<>(); wrapper.eq("table_name", tableName); wrapper.ne("status", BizCode.Status.DELETE); SysFileTemplate selectOne = selectOne(wrapper); return selectOne; }
以下是mybatisPlus的源碼,可以看出selectOne方法也是調用瞭selectList方法。在看getObject方法,如果selectList方法獲取的值大於1時,隻是發出一個警告消息 Warn: execute Method There are 2 results.,之後取第一條消息返回去,所以selectOne方法得到的就是一條消息(null值除外)
@Override public T selectOne(Wrapper<T> wrapper) { return SqlHelper.getObject(baseMapper.selectList(wrapper)); } /** * <p> * 從list中取第一條數據返回對應List中泛型的單個結果 * </p> * * @param list * @param <E> * @return */ public static <E> E getObject(List<E> list) { if (CollectionUtils.isNotEmpty(list)) { int size = list.size(); if (size > 1) { logger.warn(String.format("Warn: execute Method There are %s results.", size)); } return list.get(0); } return null; }
特別註意:
1、如果需要將selectOne的返回值傳遞進行操作的話,必須考慮可能的返回null的情況,否則程序就會異常。
到此這篇關於MyBatisPlus 查詢selectOne方法實現的文章就介紹到這瞭,更多相關MyBatisPlus selectOne內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Mapper層繼承BaseMapper<T>需要引入的pom依賴方式
- mybatis plus動態數據源切換及查詢過程淺析
- MyBatis-Plus 之selectMaps、selectObjs、selectCount、selectOne的使用
- mybatisplus @Select註解中拼寫動態sql異常問題的解決
- Mybatis-Plus 通用CRUD的詳細操作