詳解Spring Data Jpa 模糊查詢(xún)的正確用法
模糊查詢(xún)
Spring Data Jpa的使用可以減少開(kāi)發(fā)者對(duì)sql語(yǔ)句的編寫(xiě),甚至完全不需要編寫(xiě)sql語(yǔ)句。但是,開(kāi)發(fā)過(guò)程中總會(huì)遇到各種復(fù)雜的場(chǎng)景以及大大小小的坑。
今天項(xiàng)目中某個(gè)功能模塊需要用到模糊查詢(xún)。原生sql中模糊查詢(xún)關(guān)鍵字‘Like',而Spring Data Jpa的Repository接口中恰恰也有實(shí)體字段對(duì)應(yīng)的Like。但是,如果直接使用它,那么恭喜你,你幸運(yùn)地掉坑了。
Spring Data Jpa 模糊查詢(xún)正確用法
首先,我們先創(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> {
/**
* 模糊查詢(xún)正確用法
* 其中username不支持模糊查詢(xún),deviceNames支持模糊查詢(xún)
*
* @param deviceNames 模糊查詢(xún)deviceNames
* @param username 用戶(hù)名稱(chēng)
* @return {@link List<ExampleEntity>}
*/
List<ExampleEntity> findAllByDeviceNamesContainingAndUsername(String deviceNames,String username);
/**
* 模糊查詢(xún)錯(cuò)誤用法
* 其中username不支持模糊查詢(xún),deviceNames支持模糊查詢(xún)
*
* @param deviceNames 模糊查詢(xún)deviceNames
* @param username 用戶(hù)名稱(chēng)
* @return {@link List<ExampleEntity>}
*/
List<ExampleEntity> findAllByDeviceNamesLikeAndUsername(String deviceNames,String username);
}
最后,在測(cè)試類(lèi)中測(cè)試ExampleRepository中的兩個(gè)方法,(測(cè)試結(jié)果暫不展示)發(fā)現(xiàn)findAllByDeviceNamesLikeAndUsername方法并沒(méi)有正確查詢(xún)到我們想要的結(jié)果,得到的結(jié)果是精確查詢(xún)的結(jié)果。而findAllByDeviceNamesContainingAndUsername得到了我們想要的模糊查詢(xún)的結(jié)果。
總結(jié)
如果想要在項(xiàng)目中不編寫(xiě)sql原生語(yǔ)句的情況下使用模糊查詢(xún),請(qǐng)使用Containing關(guān)鍵字,而非想當(dāng)然的認(rèn)為原生使用Like關(guān)鍵字,JPA中也是使用Like關(guān)鍵字。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java中實(shí)現(xiàn)線(xiàn)程的三種方式及對(duì)比_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
本文給大家分享了java實(shí)現(xiàn)線(xiàn)程的三種方式,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-05-05
Java中l(wèi)ist.foreach()和list.stream().foreach()用法詳解
在Java中List是一種常用的集合類(lèi),用于存儲(chǔ)一組元素,List提供了多種遍歷元素的方式,包括使用forEach()方法和使用Stream流的forEach()方法,這篇文章主要給大家介紹了關(guān)于Java中l(wèi)ist.foreach()和list.stream().foreach()用法的相關(guān)資料,需要的朋友可以參考下2024-07-07
Mybatis Plus 增刪改查的實(shí)現(xiàn)(小白教程)
本文主要介紹了Mybatis Plus 增刪改查,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
java固定大小隊(duì)列的幾種實(shí)現(xiàn)方式詳解
隊(duì)列的特點(diǎn)是節(jié)點(diǎn)的排隊(duì)次序和出隊(duì)次序按入隊(duì)時(shí)間先后確定,即先入隊(duì)者先出隊(duì),后入隊(duì)者后出隊(duì),這篇文章主要給大家介紹了關(guān)于java固定大小隊(duì)列的幾種實(shí)現(xiàn)方式,需要的朋友可以參考下2021-07-07
JAVA實(shí)現(xiàn) springMVC方式的微信接入、實(shí)現(xiàn)消息自動(dòng)回復(fù)實(shí)例
本篇文章主要介紹了JAVA實(shí)現(xiàn) springMVC方式的微信接入、實(shí)現(xiàn)消息自動(dòng)回復(fù),這里整理了詳細(xì)的代碼,有需要的小伙伴可以參考下。2016-12-12

