mybatis模糊查詢like語句該如何寫
具體實(shí)現(xiàn)
在 MyBatis 中,模糊查詢可以通過在 SQL 語句中使用 like 關(guān)鍵字來實(shí)現(xiàn)。
如下所示:
<select id="findUsersByKeyword" parameterType="String" resultType="User"> select * from user where username like concat('%', #{keyword}, '%') </select>
其中,#{keyword} 是傳入的參數(shù),concat 函數(shù)用于拼接字符串,% 表示任意字符。
在 Java 代碼中調(diào)用該方法:
List<User> users = sqlSession.selectList("findUsersByKeyword", "Tom");
這樣,就可以查詢到用戶名中包含 "Tom" 的所有用戶。
這段 MyBatis 的 SQL 語句可以被解析成類似于以下的 SQL 語句:
為什么這樣做
select * from user where username like '%Tom%'
這段 SQL 語句使用了 LIKE 關(guān)鍵字來進(jìn)行模糊查詢。
在 MyBatis 中,使用 concat 函數(shù)將 SQL 語句的拼接操作通過 Mapper 配置文件傳遞進(jìn)來,并把需要查詢的關(guān)鍵詞作為參數(shù)傳入 SQL 語句中,就可以使用 LIKE 進(jìn)行模糊查詢了。
具體來說,使用了 #{keyword} 占位符號的 SQL 語句將作為參數(shù)傳入對應(yīng)的 Mapper 接口的實(shí)現(xiàn)方法中,即
List<User> users = sqlSession.selectList("findUsersByKeyword", "Tom");
最終,MyBatis 會把 #{keyword} 替換為 "Tom",生成完整的 SQL 語句并執(zhí)行查詢操作,返回符合條件的結(jié)果列表。
myabtis-plus
在 MyBatis-Plus 中,模糊查詢也可以使用 Like 函數(shù)來實(shí)現(xiàn)。假設(shè)我們有一個(gè) User 實(shí)體類,需要根據(jù)用戶名進(jìn)行模糊查詢,實(shí)現(xiàn)方式如下:
@Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { @Override public List<User> findUsersByKeyword(String keyword) { LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.like(User::getUsername, keyword); return baseMapper.selectList(queryWrapper); } }
注意到這里我們使用了 LambdaQueryWrapper
類來構(gòu)建查詢條件,其中調(diào)用了 like
方法,類似于 SQL 語句中的 LIKE。
User::getUsername
是 Java 8 中的方法引用,用于獲取 User 實(shí)體中的用戶名屬性,keyword 是查詢關(guān)鍵詞,即需要查詢的模糊匹配字符串。
最后,調(diào)用 selectList
方法會將 queryWrapper
中構(gòu)建的查詢條件通過 Mybatis-plus 進(jìn)行解析,自動生成對應(yīng)的 SQL 語句,根據(jù)由 Mybatis-plus 自動生成的 SQL 語句進(jìn)行數(shù)據(jù)庫查詢,并返回符合條件的結(jié)果列表。
需要注意的是,在使用 LambdaQueryWrapper
進(jìn)行模糊查詢時(shí),可采用不同類型的 like,如 likeLeft、likeRight 等等,用于在模糊匹配時(shí)指定模糊匹配的位置。在具體實(shí)現(xiàn)時(shí),應(yīng)根據(jù)實(shí)際需求進(jìn)行選擇。
總結(jié)
在 MyBatis 中,使用 like
關(guān)鍵字進(jìn)行模糊查詢,可通過在 SQL 語句中使用 concat()
函數(shù)將需要查詢的關(guān)鍵詞拼接到 SQL 語句中實(shí)現(xiàn)。
在 MyBatis-Plus 中,使用 LambdaQueryWrapper
類構(gòu)建查詢條件,通過調(diào)用 like
方法進(jìn)行模糊查詢,用于獲取對應(yīng)實(shí)體的屬性并指定查詢關(guān)鍵詞。
總的來說,模糊匹配是 SQL 查詢中比較常用的一種方式,MyBatis 和 MyBatis-Plus 都能夠很方便地支持模糊查詢,具體實(shí)現(xiàn)根據(jù)項(xiàng)目需要進(jìn)行選擇。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
JAVA JDK8 List分組的實(shí)現(xiàn)和用法
今天小編就為大家分享一篇關(guān)于JAVA JDK8 List分組的實(shí)現(xiàn)和用法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12寶塔面板配置及部署javaweb教程(全網(wǎng)最全)
這篇文章主要介紹了寶塔面板配置及部署javaweb教程(全網(wǎng)最全),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06SpringCloud網(wǎng)關(guān)Gateway架構(gòu)解析
這篇文章主要介紹了SpringCloud網(wǎng)關(guān)Gateway架構(gòu)解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03Java8新特性之StampedLock_動力節(jié)點(diǎn)Java學(xué)院整理
本文從synchronized、Lock到Java8新增的StampedLock進(jìn)行對比分析,對Java8新特性之StampedLock相關(guān)知識感興趣的朋友一起看看吧2017-06-06JNDI簡介_動力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了JNDI簡介,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-08-08SpringBoot中實(shí)現(xiàn)接收文件和對象
這篇文章主要介紹了SpringBoot實(shí)現(xiàn)接收文件和對象,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07springboot實(shí)現(xiàn)指定mybatis中mapper文件掃描路徑
這篇文章主要介紹了springboot實(shí)現(xiàn)指定mybatis中mapper文件掃描路徑方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06Java實(shí)現(xiàn)的兩種常見簡單查找算法示例【快速查找與二分查找】
這篇文章主要介紹了Java實(shí)現(xiàn)的兩種常見簡單查找算法,結(jié)合具體實(shí)例形式分析了java快速查找與二分查找的原理與簡單實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-09-09