詳解Spring Data JPA使用@Query注解(Using @Query)
經(jīng)過幾天的折騰,終于到了學(xué)習(xí)一個重量級的查詢方式上,使用@Query注解,使用注解有兩種方式,一種是JPQL的SQL語言方式,一種是原生SQL的語言,略有區(qū)別,后者我們更熟悉一些。話不多說,看代碼。
1、在CustomerRepository里添加
/**
* 模糊匹配
* @param bauer
* @return
*/
@Query("select c from Customer c where c.firstName=?1")
Customer findByFirstName2(String bauer);
@Query("select c from Customer c where c.lastName=?1 order by c.id desc")
List<Customer> findByLastName2(String lastName);
/**
* 一個參數(shù),匹配兩個字段
* @param name2
* @return
* 這里Param的值和=:后面的參數(shù)匹配,但不需要和方法名對應(yīng)的參數(shù)值對應(yīng)
*/
@Query("select c from Customer c where c.firstName=:name or c.lastName=:name order by c.id desc")
List<Customer> findByName(@Param("name") String name2);
/**
* 一個參數(shù),匹配兩個字段
* @param name
* @return
* 這里的%只能放在占位的前面,后面不行
*/
@Query("select c from Customer c where c.firstName like %?1")
List<Customer> findByName2(@Param("name") String name);
/**
* 一個參數(shù),匹配兩個字段
* @param name
* @return
* 開啟nativeQuery=true,在value里可以用原生SQL語句完成查詢
*/
@Query(nativeQuery = true,value = "select * from Customer c where c.first_name like concat('%' ,?1,'%') ")
List<Customer> findByName3(@Param("name") String name);
2、在CustomerController內(nèi)添加
/**
* @Query注解方式查詢
* 查詢FirstName為指定字符串
*/
@RequestMapping("/findByFirstName2")
public void findByFirstName2(){
Customer customer = repository.findByFirstName2("Bauer");
if(customer!=null){
System.out.println(customer.toString());
}
System.out.println("-------------------------------------------");
}
/**
* @Query注解方式查詢
* 查詢LastName為指定字符串
*/
@RequestMapping("/findByLastName2")
public void findByLastName2(){
List<Customer> result = repository.findByLastName2("Bauer");
for (Customer customer:result){
System.out.println(customer.toString());
}
System.out.println("-------------------------------------------");
}
/**
* @Query注解方式查詢,
* 用@Param指定參數(shù),匹配firstName和lastName
*/
@RequestMapping("/findByName")
public void findByName(){
List<Customer> result = repository.findByName("Bauer");
for (Customer customer:result){
System.out.println(customer.toString());
}
System.out.println("-------------------------------------------");
}
/**
* @Query注解方式查詢,使用關(guān)鍵詞like
* 用@Param指定參數(shù),firstName的結(jié)尾為e的字符串
*/
@RequestMapping("/findByName2")
public void findByName2(){
List<Customer> result = repository.findByName2("e");
for (Customer customer:result){
System.out.println(customer.toString());
}
System.out.println("-------------------------------------------");
}
/**
* @Query注解方式查詢,模糊匹配關(guān)鍵字e
*/
@RequestMapping("/findByName3")
public void findByName3(){
List<Customer> result = repository.findByName3("e");
for (Customer customer:result){
System.out.println(customer.toString());
}
System.out.println("-------------------------------------------");
}
可能看了上面的代碼有些疑惑,這里做一下解釋:
?加數(shù)字表示占位符,?1代表在方法參數(shù)里的第一個參數(shù),區(qū)別于其他的index,這里從1開始
=:加上變量名,這里是與方法參數(shù)中有@Param的值匹配的,而不是與實際參數(shù)匹配的
JPQL的語法中,表名的位置對應(yīng)Entity的名稱,字段對應(yīng)Entity的屬性,詳細(xì)語法見相關(guān)文檔
要使用原生SQL需要在@Query注解中設(shè)置nativeQuery=true,然后value變更為原生SQL即可
參考:
官方文檔,http://docs.spring.io/spring-data/jpa/docs/current/reference/html/
DEMO,https://github.com/icnws/spring-data-jpa-demo
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java BeanMap實現(xiàn)Bean與Map的相互轉(zhuǎn)換
這篇文章主要介紹了利用BeanMap進(jìn)行對象與Map的相互轉(zhuǎn)換,通過net.sf.cglib.beans.BeanMap類中的方法來轉(zhuǎn)換,效率極高,本文給大家分享實現(xiàn)代碼,感興趣的朋友一起看看吧2022-11-11
基于Javamail實現(xiàn)發(fā)送郵件(QQ/網(wǎng)易郵件服務(wù)器)
這篇文章主要介紹了基于Javamail實現(xiàn)發(fā)送郵件,分別使用QQ郵箱作為smtp郵件服務(wù)器發(fā)送郵件,使用網(wǎng)易郵箱作為smtp郵件服務(wù)器發(fā)送郵件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-08-08
maven?插件?assembly?打tar.gz包的詳細(xì)過程
這篇文章主要介紹了maven插件assembly打tar.gz包的詳細(xì)過程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-06-06
SpringBoot深入探究@Conditional條件裝配的使用
這篇文章主要為大家介紹了SpringBoot底層注解@Conditional的使用分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06

