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