詳解Spring Data JPA使用@Query注解(Using @Query)
經(jīng)過幾天的折騰,終于到了學習一個重量級的查詢方式上,使用@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ù)匹配,但不需要和方法名對應的參數(shù)值對應
*/
@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注解方式查詢,使用關鍵詞like
* 用@Param指定參數(shù),firstName的結尾為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注解方式查詢,模糊匹配關鍵字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的語法中,表名的位置對應Entity的名稱,字段對應Entity的屬性,詳細語法見相關文檔
要使用原生SQL需要在@Query注解中設置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)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
java?LockSupport實現(xiàn)原理示例解析
這篇文章主要為大家介紹了java?LockSupport實現(xiàn)原理示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01
創(chuàng)建Maven項目和Spring IOC實例過程解析
這篇文章主要介紹了創(chuàng)建Maven項目和Spring IOC實例過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-12-12

