全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

经过几天的折腾,终于到了学习一个重量级的查询方式上,使用@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即可

参考:

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

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

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


# Spring  # Data  # JPA  # @Query注解  # JPA使用@Query  # 在JPA的@Query注解中使用limit条件(详解)  # Spring data jpa @Query update的  # 聊聊Spring data jpa @query使用原生SQl  # 需要注意的坑  # JPA @Query时  # 无法使用limit函数的问题及解决  # 关键词  # 文档  # 放在  # 看了  # 第一个  # 几天  # 可以用  # 中有  # 有两种  # 多说  # 但不  # 于其  # 要使  # 大家多多  # 而不是  # 变量名  # lastName  # order  # id  # String 


相关文章: h5网站制作工具有哪些,h5页面制作工具有哪些?  浅析上传头像示例及其注意事项  建站之星备案是否影响网站上线时间?  建站之星安装路径如何正确选择及配置?  建站主机SSH密钥生成步骤及常见问题解答?  小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化  想学网站制作怎么学,建立一个网站要花费多少?  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  装修招标网站设计制作流程,装修招标流程?  如何选择美橙互联多站合一建站方案?  网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?  香港服务器WordPress建站指南:SEO优化与高效部署策略  建站主机如何选?性能与价格怎样平衡?  一键网站制作软件,义乌购一件代发流程?  C#如何使用XPathNavigator高效查询XML  如何在企业微信快速生成手机电脑官网?  建站之星免费版是否永久可用?  MySQL查询结果复制到新表的方法(更新、插入)  如何彻底卸载建站之星软件?  如何高效利用亚马逊云主机搭建企业网站?  微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?  无锡营销型网站制作公司,无锡网选车牌流程?  宝塔面板创建网站无法访问?如何快速排查修复?  小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建  深入理解Android中的xmlns:tools属性  建站之星展会模板:智能建站与自助搭建高效解决方案  如何高效生成建站之星成品网站源码?  如何快速搭建高效香港服务器网站?  如何配置WinSCP新建站点的密钥验证步骤?  5种Android数据存储方式汇总  清除minerd进程的简单方法  视频网站制作教程,怎么样制作优酷网的小视频?  常州自助建站工具推荐:低成本搭建与模板选择技巧  如何用y主机助手快速搭建网站?  高端云建站费用究竟需要多少预算?  详解jQuery中基本的动画方法  已有域名如何快速搭建专属网站?  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  如何用已有域名快速搭建网站?  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  如何配置IIS站点权限与局域网访问?  全景视频制作网站有哪些,全景图怎么做成网页?  建站之星代理平台如何选择最佳方案?  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  建站主机是否等同于虚拟主机?  ,巨量百应是干嘛的?  如何快速生成凡客建站的专业级图册?  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  已有域名和空间,如何快速搭建网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。