栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

详解Spring Data JPA使用@Query注解(Using @Query)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

详解Spring Data JPA使用@Query注解(Using @Query)

经过几天的折腾,终于到了学习一个重量级的查询方式上,使用@Query注解,使用注解有两种方式,一种是JPQL的SQL语言方式,一种是原生SQL的语言,略有区别,后者我们更熟悉一些。话不多说,看代码。

1、在CustomerRepository里添加

  
  @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 findByLastName2(String lastName);

  
  @Query("select c from Customer c where c.firstName=:name or c.lastName=:name order by c.id desc")
  List findByName(@Param("name") String name2);

  
  @Query("select c from Customer c where c.firstName like %?1")
  List findByName2(@Param("name") String name);

  
  @Query(nativeQuery = true,value = "select * from Customer c where c.first_name like concat('%' ,?1,'%') ")
  List findByName3(@Param("name") String name);

2、在CustomerController内添加​

 
  
  @RequestMapping("/findByFirstName2")
  public void findByFirstName2(){
    Customer customer = repository.findByFirstName2("Bauer");
    if(customer!=null){
      System.out.println(customer.toString());
    }
    System.out.println("-------------------------------------------");
  }

  
  @RequestMapping("/findByLastName2")
  public void findByLastName2(){
    List result = repository.findByLastName2("Bauer");
    for (Customer customer:result){
      System.out.println(customer.toString());
    }
    System.out.println("-------------------------------------------");
  }

  
  @RequestMapping("/findByName")
  public void findByName(){
    List result = repository.findByName("Bauer");
    for (Customer customer:result){
      System.out.println(customer.toString());
    }
    System.out.println("-------------------------------------------");
  }

  
  @RequestMapping("/findByName2")
  public void findByName2(){
    List result = repository.findByName2("e");
    for (Customer customer:result){
      System.out.println(customer.toString());
    }
    System.out.println("-------------------------------------------");
  }

  
  @RequestMapping("/findByName3")
  public void findByName3(){
    List 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即可

参考:

官方文档,http://docs.spring.io/spring-data/jpa/docs/current/reference/html/

DEMO,https://github.com/icnws/spring-data-jpa-demo

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/145241.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号