详解Spring Data JPA使用@Query注解(Using @Query)
程序员文章站
2023-11-05 16:00:22
经过几天的折腾,终于到了学习一个重量级的查询方式上,使用@query注解,使用注解有两种方式,一种是jpql的sql语言方式,一种是原生sql的语言,略有区别,后者我们更熟...
经过几天的折腾,终于到了学习一个重量级的查询方式上,使用@query注解,使用注解有两种方式,一种是jpql的sql语言方式,一种是原生sql的语言,略有区别,后者我们更熟悉一些。话不多说,看代码。
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); /** * 一个参数,匹配两个字段 * @param name2 * @return * 这里param的值和=:后面的参数匹配,但不需要和方法名对应的参数值对应 */ @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); /** * 一个参数,匹配两个字段 * @param name * @return * 这里的%只能放在占位的前面,后面不行 */ @query("select c from customer c where c.firstname like %?1") list<customer> findbyname2(@param("name") string name); /** * 一个参数,匹配两个字段 * @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内添加
/** * @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指定参数,匹配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指定参数,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("-------------------------------------------"); }
可能看了上面的代码有些疑惑,这里做一下解释:
?加数字表示占位符,?1代表在方法参数里的第一个参数,区别于其他的index,这里从1开始
=:加上变量名,这里是与方法参数中有@param的值匹配的,而不是与实际参数匹配的
jpql的语法中,表名的位置对应entity的名称,字段对应entity的属性,详细语法见相关文档
要使用原生sql需要在@query注解中设置nativequery=true,然后value变更为原生sql即可
参考:
官方文档,
demo,
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: 过往的故事
下一篇: 利玛窦是谁?他对中国造成了哪些影响?
推荐阅读
-
详解Spring Data JPA使用@Query注解(Using @Query)
-
Spring Data JPA使用Sort进行排序(Using Sort)
-
spring data jpa使用详解(推荐)
-
【Spring Data 系列学习】Spring Data JPA @Query 注解查询
-
Spring data jpa的使用与详解(复杂动态查询及分页,排序)
-
Spring Data Jpa使用@Query时 报错Validation failed for query for method public abstract
-
spring data jpa @Query注解中delete语句报错的解决
-
Spring Data Jpa 中原生查询 REGEXP 的使用详解
-
Spring data jpa的使用与详解(复杂动态查询及分页,排序)
-
【Spring Data 系列学习】Spring Data JPA @Query 注解查询