开发人员必须要掌握《Spring Data JPA的四种查询方式》
目录
一、SpringDataJPa
介绍springDataJPa
Spring Data JPA 是 Spring 基于 ORM 框架、JPA 规范的基础上封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据库的访问和操作。它提供了包括增删改查等在内的常用功能,且易于扩展!学习并使用 Spring Data JPA 可以极大提高开发效率!
Spring Data JPA 是更大的 Spring Data 系列的一部分,可以轻松实现基于 JPA 的存储库。该模块处理对基于 JPA 的数据访问层的增强支持。它使构建使用数据访问技术的 Spring 驱动的应用程序变得更加容易。
SpringDataJPA其实是对JPA规范的封装抽象,底层还是使用了Hibernate的JPA技术实现,引用JPQL(Java Persistence Query Language)查询语言,属于Spring整个生态体系的一部分。随着Spring Boot和Spring Cloud在市场上的流行,Spring Data JPA也逐渐进入大家的视野,它们组成有机的整体,使用起来比较方便,加快了开发的效率,使开发者不需要关心和配置更多的东西,完全可以沉浸在Spring的完整生态标准实现下。JPA上手简单,开发效率高,对对象的支持比较好,又有很大的灵活性,市场的认可度越来越高。
官网地址:
SpringDataJpa,jpa,hibernate之间的关系
底层工作的还是Hibernate,听说啊,JPA与Hibernate的创始人是同一人。
二、搭建环境
1.创建Maven工程,导入坐标
2.编写SpringDataJPA的配置文件(applicationContext.xml)
3.创建实体类,数据库表
4.数据库表的SQL
5.DAO接口
三、四种查询方式:
1.基本的增删改查
继承JpaRepository,JpaSpecificationExecutor 接口,使用JPA封装好的方法。
JpaRepository封装好的方法
JpaSpecificationExecutor封装好的方法
测试类
2.JPQL查询
jpa query language (jpq查询语言),与原生SQL语句类似,并且完全面向对象,通过类名和属性访问,查询的是类和类中的属性
上一篇博客介绍了JPQL:
需要将JPQL语句配置到接口方法上
1.特有的查询:需要在dao接口上配置方法
2.在新添加的方法上,使用注解的形式配置jpql查询语句
3.注解 : @Query
DAO接口:
测试类:
3.SQL查询
1.特有的查询:需要在dao接口上配置方法
2.在新添加的方法上,使用注解的形式配置sql查询语句
3.注解 : @Query
value :jpql语句 | sql语句
nativeQuery :false(使用jpql查询) | true(使用本地查询:sql查询)
DAO接口
测试类:
4.方法命名查询
是对jpql查询,更加深入一层的封装
我们只需要按照SpringDataJpa提供的方法名称规则定义方法,不需要再配置jpql语句,完成查询
按照Spring Data JPA 定义的规则,查询方法以findBy开头,涉及条件查询时,条件的属性用条件关键字连接,要注意的是:条件属性首字母需大写。框架在进行方法名解析时,会先把方法名多余的前缀截取掉,然后对剩下部分进行解析。
部分对照表
|
|
|
|
|
Keyword |
Sample |
JPQL |
|
|
And |
findByLastnameAndFirstname |
… where x.lastname = ?1 and x.firstname = ?2 |
|
|
Or |
findByLastnameOrFirstname |
… where x.lastname = ?1 or x.firstname = ?2 |
|
|
Is,Equals |
findByFirstnameIs, findByFirstnameEquals |
… where x.firstname = ?1 |
|
|
Between |
findByStartDateBetween |
… where x.startDate between ?1 and ?2 |
|
|
LessThan |
findByAgeLessThan |
… where x.age < ?1 |
|
|
LessThanEqual |
findByAgeLessThanEqual |
… where x.age ⇐ ?1 |
|
|
GreaterThan |
findByAgeGreaterThan |
… where x.age > ?1 |
|
|
GreaterThanEqual |
findByAgeGreaterThanEqual |
… where x.age >= ?1 |
|
|
After |
findByStartDateAfter |
… where x.startDate > ?1 |
|
|
Before |
findByStartDateBefore |
… where x.startDate < ?1 |
|
|
IsNull |
findByAgeIsNull |
… where x.age is null |
|
|
IsNotNull,NotNull |
findByAge(Is)NotNull |
… where x.age not null |
|
|
Like |
findByFirstnameLike |
… where x.firstname like ?1 |
|
|
NotLike |
findByFirstnameNotLike |
… where x.firstname not like ?1 |
|
|
StartingWith |
findByFirstnameStartingWith |
… where x.firstname like ?1 (parameter bound with appended %) |
|
|
EndingWith |
findByFirstnameEndingWith |
… where x.firstname like ?1 (parameter bound with prepended %) |
|
|
Containing |
findByFirstnameContaining |
… where x.firstname like ?1 (parameter bound wrapped in %) |
|
|
OrderBy |
findByAgeOrderByLastnameDesc |
… where x.age = ?1 order by x.lastname desc |
|
|
Not |
findByLastnameNot |
… where x.lastname <> ?1 |
|
|
In |
findByAgeIn(Collection ages) |
… where x.age in ?1 |
|
|
NotIn |
findByAgeNotIn(Collection age) |
… where x.age not in ?1 |
|
|
TRUE |
findByActiveTrue() |
… where x.active = true |
|
|
FALSE |
findByActiveFalse() |
… where x.active = false |
|
|
IgnoreCase |
findByFirstnameIgnoreCase |
… where UPPER(x.firstame) = UPPER(?1) |
|
|
DAO接口:
测试类:
如果本篇博客对您有一定的帮助,大家记得留言+点赞+收藏哦。
- 点赞
- 收藏
- 关注作者
评论(0)