spring-data-jpa快速入门(二)——简单查询
一、方法名解析
1.引言
回顾HelloWorld项目中的dao接口
public interface GirlRepository extends JpaRepository<Girl, Integer>{
// 新增自定义查询方法
List<Girl> findByAge(Integer age);
}
可以看到,这个接口中我们只是声明了方法而没有写实现,但是却是能用的,这便得益于JPA的方法名解析了
2.简单条件查询
按照 Spring Data 的规范,查询方法以 find | read | get 开头
涉及条件查询时,条件的属性用条件关键字连接,要注意的是:条件属性以首字母大写
常用的关键字如下:
And --- 等价于 SQL 中的 and 关键字,比如 findByUsernameAndPassword(String user, Striang pwd);
Or --- 等价于 SQL 中的 or 关键字,比如 findByUsernameOrAddress(String user, String addr);
Between --- 等价于 SQL 中的 between 关键字,比如 findBySalaryBetween(int max, int min);
LessThan --- 等价于 SQL 中的 "<",比如 findBySalaryLessThan(int max);
GreaterThan --- 等价于 SQL 中的">",比如 findBySalaryGreaterThan(int min);
IsNull --- 等价于 SQL 中的 "is null",比如 findByUsernameIsNull();
IsNotNull --- 等价于 SQL 中的 "is not null",比如 findByUsernameIsNotNull();
NotNull --- 与 IsNotNull 等价;
Like --- 等价于 SQL 中的 "like",比如 findByUsernameLike(String user);
StartingWith
NotLike --- 等价于 SQL 中的 "not like",比如 findByUsernameNotLike(String user);
OrderBy --- 等价于 SQL 中的 "order by",比如 findByUsernameOrderBySalaryAsc(String user);
Not --- 等价于 SQL 中的 "! =",比如 findByUsernameNot(String user);
In --- 等价于 SQL 中的 "in",比如 findByUsernameIn(Collection<String> userList) ,方法的参数可以是 Collection 类型,也可以是数组或者不定长参数;
NotIn --- 等价于 SQL 中的 "not in",比如 findByUsernameNotIn(Collection<String> userList) ,方法的参数可以是 Collection 类型,也可以是数组或者不定长参数;
完整关键字支持,查看官方文档:点击查看
IDEA对这方面支持非常友好!写方法解析时自动有智能提示!
示例:
List<Girl> findByNameStartingWithAndIdLessThan(String name, Integer id);
/**
* 1. Repository 是一个空接口. 即是一个标记接口
* 2. 若我们定义的接口继承了 Repository, 则该接口会被 IOC 容器识别为一个 Repository Bean.
* 纳入到 IOC 容器中. 进而可以在该接口中定义满足一定规范的方法.
*
* 3. 实际上, 也可以通过 @RepositoryDefinition 注解来替代继承 Repository 接口
*/
/**
* 在 Repository 子接口中声明方法
* 1. 不是随便声明的. 而需要符合一定的规范
* 2. 查询方法以 find | read | get 开头
* 3. 涉及条件查询时,条件的属性用条件关键字连接
* 4. 要注意的是:条件属性以首字母大写。
* 5. 支持属性的级联查询. 若当前类有符合条件的属性, 则优先使用, 而不使用级联属性.
* 若需要使用级联属性, 则属性之间使用 _ 进行连接.
*/
//@RepositoryDefinition(domainClass=Person.class,idClass=Integer.class)
public interface PersonRepsotory extends
JpaRepository<Person, Integer>,
JpaSpecificationExecutor<Person>, PersonDao{ //根据 lastName 来获取对应的 Person
Person getByLastName(String lastName); //WHERE lastName LIKE ?% AND id < ?
List<Person> getByLastNameStartingWithAndIdLessThan(String lastName, Integer id); //WHERE lastName LIKE %? AND id < ?
List<Person> getByLastNameEndingWithAndIdLessThan(String lastName, Integer id); //WHERE email IN (?, ?, ?) OR birth < ?
List<Person> getByEmailInAndBirthLessThan(List<String> emails, Date birth); //WHERE a.id > ?
List<Person> getByAddress_IdGreaterThan(Integer id);
更多示例
其他的关键字也是类似,可以在控制台看到打印的SQL(配置了show sql)
当然,缺点非常明显,方法名特别特别长!这个后期会通过JPQL进行改进!
二、自定义查询
例如带子查询的就无法实现,这里就需要自定义SQL来进行查询了!
参考:https://www.cnblogs.com/zj0208/p/6008627.html
spring-data-jpa快速入门(二)——简单查询的更多相关文章
- Spring Data JPA —— 快速入门
一.概述 JPA : Java Persistence API, Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中. Spring D ...
- Spring data JPA 快速入门
1需求 向客户中插入一条数据 如果使用Jpa框架可以不用先建表 可以使用框架生成表 2 实现步骤 a 创建工程 使用maven管理工程 <properties> ...
- 【hql】spring data jpa中 @Query使用hql查询 问题
spring data jpa中 @Query使用hql查询 问题 使用hql查询, 1.from后面跟的是实体类 不是数据表名 2.字段应该用实体类中的字段 而不是数据表中的属性 实体如下 hql使 ...
- spring data jpa 使用方法命名规则查询
按照Spring Data JPA 定义的规则,查询方法以findBy开头,涉及条件查询时,条件的属性用条件关键字连接,要注意的是:条件属性首字母需大写.框架在进行方法名解析时,会先把方法名多余的前缀 ...
- spring data jpa封装specification实现简单风格的动态查询
github:https://github.com/peterowang/spring-data-jpa-demo 单一实体的动态查询: @Servicepublic class AdvancedUs ...
- 使用Spring Data JPA的Specification构建数据库查询
Spring Data JPA最为优秀的特性就是可以通过自定义方法名称生成查询来轻松创建查询SQL.Spring Data JPA提供了一个Repository编程模型,最简单的方式就是通过扩展Jpa ...
- Spring Data JPA 实现多表关联查询
本文地址:https://liuyanzhao.com/6978.html 最近抽出时间来做博客,数据库操作使用的是 JPA,相对比 Mybatis 而言,JPA 单表操作非常方便,增删改查都已经写好 ...
- spring data jpa 使用JPQL的方式查询
用Spring Data JPA提供的查询方法已经可以解决大部分的应用场景,但是对于某些业务来说,我们还需要灵活的构造查询条件,这时就可以使用@Query注解,结合JPQL的语句方式完成查询 @Que ...
- Spring Data JPA 复杂/多条件组合查询
1: 编写DAO类或接口 dao类/接口 需继承 public interface JpaSpecificationExecutor<T> 接口: 如果需要分页,还可继承 public ...
- Spring Boot【快速入门】简单案例
Spring Boot[快速入门] Spring Boot 概述 Build Anything with Spring Boot:Spring Boot is the starting point ...
随机推荐
- 如何drop大表的中不用的字段 set unused column
转自 http://foxmile.blog.163.com/blog/static/81169805201143191957184/ 我 们要删除表中不用的字段,如果直接drop column,对于 ...
- 深入理解SVG坐标体系和transformations- viewport, viewBox,preserveAspectRatio
本文翻译自blog: https://www.sarasoueidan.com/blog/svg-coordinate-systems/ SVG元素不像其他HTML元素一样受css盒子模型所制约.这个 ...
- 通过windows powershell 修改 Office 365默认的 35MB 的邮件大小限制
附件下载: 通过windows powershell 修改 Office 365默认的 35MB 的邮件大小限制
- EBS请求定义成菜单
1. 将请求定义为“功能”路径:系统管理员 –应用产品-函数输入自定义的功能名称,用户功能名以及说明 “特性”TAB页: 类型选择“表单”,其余两个字段默认:在表单TAB页: 表单字段:选择“运行 ...
- Sql Server中的谓词和运算符
谓词和运算符配合使用是我们得到理想数据的最佳途径. 一.浅谈谓词 谓词的概念:一个运算结果为True.False或Unknown的逻辑表达式.它的运用范围有:where子句.Having子句.Chec ...
- eclipse导入spring aop xml约束
步骤: 1. 2. 3. 4.取 Location:中最后一个命名:spring-aop-4.2.xsd,放到Key的最后面,Key type:选择 Schema location.点击OK 5.编 ...
- EditPlus 自动格式化js、html、css,以EditPlus 文本编辑器v3.41(1145)为例
工具/原料 edtools.rar 方法/步骤 下载工具包:edtools.rar ,解压后放到磁盘的一个目录,如D:/edTools 打开ED,打开“工具”-“配置用户工具”,在弹出 ...
- [转载]Matlab中插值函数汇总和使用说明
http://blog.sciencenet.cn/blog-457143-679275.html MATLAB中的插值函数为interp1,其调用格式为: yi= interp1(x,y,xi,' ...
- ZT Android 4.2 BT系统之蓝牙关闭过程全跟踪
Android 4.2 BT系统之蓝牙关闭过程全跟踪 分类: android 2013-08-03 00:34 2252人阅读 评论(10) 收藏 举报 代码位置: frameworks/ ...
- Java使用HTTP编程模拟多参数多文件表单信息的请求与处理
本文目的是提供Java环境下模拟浏览器页面提交多参数多文件表单请求以及解析请求的Demo代码.这里用Java提供的HttpURLConnection类做HTTP请求,再原始点可以直接使用socket. ...