经过几天的折腾,终于到了学习一个重量级的查询方式上,使用@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小时内与您取得联系。