詳解Spring Data Jpa 模糊查詢的正確用法
模糊查詢
Spring Data Jpa的使用可以減少開(kāi)發(fā)者對(duì)sql語(yǔ)句的編寫(xiě),甚至完全不需要編寫(xiě)sql語(yǔ)句。但是,開(kāi)發(fā)過(guò)程中總會(huì)遇到各種復(fù)雜的場(chǎng)景以及大大小小的坑。
今天項(xiàng)目中某個(gè)功能模塊需要用到模糊查詢。原生sql中模糊查詢關(guān)鍵字‘Like',而Spring Data Jpa的Repository接口中恰恰也有實(shí)體字段對(duì)應(yīng)的Like。但是,如果直接使用它,那么恭喜你,你幸運(yùn)地掉坑了。
Spring Data Jpa 模糊查詢正確用法
首先,我們先創(chuàng)建一個(gè)實(shí)體用來(lái)存儲(chǔ)我們的數(shù)據(jù)
/** * 實(shí)體 * * @author chentai * @date 18/04/22 */ @Data @Entity @EqualsAndHashCode(callSuper = true) public class ExampleEntity{ @Id @GeneratedValue(generator = "uuid") @GenericGenerator(name = "uuid", strategy = "uuid") private String Id ; private String username; private String deviceNames; }
接著,創(chuàng)建我們實(shí)體對(duì)應(yīng)的Repository接口
/** * @author chentai * @date 18/04/22 */ @Repository public interface ExampleRepository extends CrudRepository<ExampleEntity, String> { /** * 模糊查詢正確用法 * 其中username不支持模糊查詢,deviceNames支持模糊查詢 * * @param deviceNames 模糊查詢deviceNames * @param username 用戶名稱 * @return {@link List<ExampleEntity>} */ List<ExampleEntity> findAllByDeviceNamesContainingAndUsername(String deviceNames,String username); /** * 模糊查詢錯(cuò)誤用法 * 其中username不支持模糊查詢,deviceNames支持模糊查詢 * * @param deviceNames 模糊查詢deviceNames * @param username 用戶名稱 * @return {@link List<ExampleEntity>} */ List<ExampleEntity> findAllByDeviceNamesLikeAndUsername(String deviceNames,String username); }
最后,在測(cè)試類中測(cè)試ExampleRepository中的兩個(gè)方法,(測(cè)試結(jié)果暫不展示)發(fā)現(xiàn)findAllByDeviceNamesLikeAndUsername方法并沒(méi)有正確查詢到我們想要的結(jié)果,得到的結(jié)果是精確查詢的結(jié)果。而findAllByDeviceNamesContainingAndUsername得到了我們想要的模糊查詢的結(jié)果。
總結(jié)
如果想要在項(xiàng)目中不編寫(xiě)sql原生語(yǔ)句的情況下使用模糊查詢,請(qǐng)使用Containing關(guān)鍵字,而非想當(dāng)然的認(rèn)為原生使用Like關(guān)鍵字,JPA中也是使用Like關(guān)鍵字。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot如何優(yōu)雅的處理校驗(yàn)參數(shù)的方法
這篇文章主要介紹了SpringBoot如何優(yōu)雅的處理校驗(yàn)參數(shù)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12SpringBoot @Import與@Conditional注解使用詳解
在了解spring boot自動(dòng)配置原理前,再來(lái)了解下兩個(gè)注解@Import注解和@Conditional注解,@Conditional是Spring4新提供的注解,它的作用是按照一定的條件進(jìn)行判斷,滿足條件給容器注冊(cè)bean2022-10-10Java?MethodHandles介紹與反射對(duì)比區(qū)別詳解
這篇文章主要為大家介紹了Java?MethodHandles介紹與反射對(duì)比區(qū)別詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11springboot配置多數(shù)據(jù)源(靜態(tài)和動(dòng)態(tài)數(shù)據(jù)源)
在開(kāi)發(fā)過(guò)程中,很多時(shí)候都會(huì)有垮數(shù)據(jù)庫(kù)操作數(shù)據(jù)的情況,需要同時(shí)配置多套數(shù)據(jù)源,本文主要介紹了springboot配置多數(shù)據(jù)源(靜態(tài)和動(dòng)態(tài)數(shù)據(jù)源),感興趣的可以了解一下2023-09-09Java服務(wù)假死之生產(chǎn)事故的排查與優(yōu)化問(wèn)題
在服務(wù)器上通過(guò)curl命令調(diào)用一個(gè)Java服務(wù)的查詢接口,半天沒(méi)有任何響應(yīng),怎么進(jìn)行這一現(xiàn)象排查呢,下面小編給大家記一次生產(chǎn)事故的排查與優(yōu)化——Java服務(wù)假死問(wèn)題,感興趣的朋友一起看看吧2022-07-07idea顯示springboot多服務(wù)啟動(dòng)界面service操作
這篇文章主要介紹了idea顯示springboot多服務(wù)啟動(dòng)界面service操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09Spring基于AspectJ的AOP開(kāi)發(fā)案例解析
這篇文章主要介紹了Spring的基于AspectJ的AOP開(kāi)發(fā),AspectJ是一個(gè)基于Java語(yǔ)言的AOP框架,使用AspectJ需要導(dǎo)入Spring?AOP和AspectJ相關(guān)jar包,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05JAVA不可變類(immutable)機(jī)制與String的不可變性(推薦)
這篇文章主要介紹了JAVA不可變類(immutable)機(jī)制與String的不可變性(推薦)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-08-08