MyBatis-plus中的模糊查詢解讀
MyBatis-plus模糊查詢
在使用MyBatis-plus的時候,一些基礎(chǔ)的增刪改查可以不用再自己寫sql了:
public interface UserDao extends BaseMapper<FykUser>{ }
就這樣,就可以實(shí)現(xiàn)user表的增刪改查了。
模糊查詢
使用userDao.selectList(queryWrapper)方法,就可以查詢出一個用戶列表。
如果需要模糊查詢,代碼如下:
//條件封裝 QueryWrapper<FykUser> queryWrapper = new QueryWrapper<>(); queryWrapper.like(StringUtils.isNotBlank(user.getName()), "NAME", user.getName()); queryWrapper.like(user.getEnable() != null, "ENABLE", user.getEnable()); List<FykUser> userList = userDao.selectList(queryWrapper);
也就是說,調(diào)用queryWrapper的like方法就可以。
這里,like方法有三個參數(shù):
- 第一個參數(shù):該參數(shù)是一個布爾類型,只有該參數(shù)是true時,才將like條件拼接到sql中;本例中,如果name字段不為空,則拼接name字段的like查詢條件;
- 第二個參數(shù):該參數(shù)是數(shù)據(jù)庫中的字段名;
- 第三個參數(shù):該參數(shù)值字段值;
需要說明的是,這里的like查詢是使用的默認(rèn)方式,也就是說在查詢條件的左右兩邊都有%:NAME = ‘%王%’;
如果只需要在左邊或者右邊拼接%,可以使用likeLeft或者likeRight方法。
其他
在QueryWrapper類中,可以看到,還有很多條件查詢的方法,諸如ge、le、lt、between等之類的方法,他們的傳參方式都和上面介紹的差不多。
MyBatis-plus指定字段模糊查詢
- mybatis-plus版本:3.3.0
- oracle版本:11g
很常見的一個需求場景:某張表在前端顯示時,查詢條件中,往往name字段需要模糊查詢,否則默認(rèn)mybatis-plus是用的全字符匹配查詢。
如何最小限度地改造代碼,實(shí)現(xiàn)某個字段模糊查詢,其實(shí)mybatis-plus官方文檔給出了答案:
通過@TableField注解地condition屬性,可以配置某個字段,始終使用模糊匹配,打開condition類,去看看有哪些可選項:
一共有5個可選項,默認(rèn)是采用第一個:EQUAL。
接下來改造自己的代碼:
然而在數(shù)據(jù)庫為oracle的情況下會報錯,打印出來的SQL如下:
SELECT COUNT(1) ?FROM TEST_TABLE ?WHERE TITLE LIKE CONCAT('%', '激光', '%');
由于oracle的CONCAT函數(shù)不支持拼接2個以上的參數(shù),因此產(chǎn)生了錯誤。因此自己定義一個注解類,@TableField注解不變,
只需要注意引入的SqlCondition類是你自己新定義的類,或者為了避免混淆,干脆你換個名字不叫SqlCondition,如下:
問題解決。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java 詳細(xì)講解分治算法如何實(shí)現(xiàn)歸并排序
分治算法的基本思想是將一個規(guī)模為N的問題分解為K個規(guī)模較小的子問題,這些子問題相互獨(dú)立且與原問題性質(zhì)相同。求出子問題的解,就可得到原問題的解,本篇文章我們就用分治算法來實(shí)現(xiàn)歸并排序2022-04-04SpringBoot整合Spring Data Elasticsearch的過程詳解
這篇文章主要介紹了SpringBoot整合Spring Data Elasticsearch的過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-09-09Java實(shí)現(xiàn)注冊登錄與郵箱發(fā)送賬號驗證激活功能
這篇文章主要介紹了Java實(shí)現(xiàn)注冊登錄與郵箱發(fā)送賬號驗證激活功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-12-12詳解如何用Java實(shí)現(xiàn)對m3u8直播流抽幀
抽幀(frame extraction)是指從視頻流中提取一些特定的幀,通常是關(guān)鍵幀或者隨機(jī)幀,以供后續(xù)處理。這篇文章主要為大家介紹了如何用Java實(shí)現(xiàn)對m3u8直播流抽幀,需要的可以參考一下2023-03-03