Spring data jpa详解

1.什么是spring data jpa

spring data jpa 是 spring 基于ORM 框架、jpa规范的基础上封装的一套jpa应用框架,可使开发者用极简的代码即可实现对数据的访问和操作。它提供了包括增删改查等在内的常用功能,且易于扩展!学习并使用 spring data jpa 可以极大提高开发效率!


基本上所有CRUD都可以依赖于它来实现。

2.使用方法

在pom.xml中加入依赖

这里写图片描述


Dao继承JpaRepository

这里写图片描述


spring data jpa 默认预先生成了一些基本的CURD的方法,例如:增、删、改等等

默认方法有:

这里写图片描述


spring data jpa 重要的地方是可以自定义简单查询,即为根据方法名来自动生成sql,例子如下:

这里写图片描述

上图的方法即会生成的sql 语句为:

select * from tb_banner where shop_id = ?1 and flag = ?2 order by priority asc

一个更加长的方法。。。。。。

这里写图片描述

上图的方法即会生成的sql语句为:

select * from tb_course where shop_id = ?1 and one_classify_id = ?2 and two_classify_id = ?3 and flag = ?4


具体的关键字,使用方法和生产成SQL如下表所示

这里写图片描述
这里写图片描述


分页查询

spring data jpa已经帮我们实现了分页的功能,在查询的方法中,需要传入参数Pageable,一般我会将pageable作为最后一个参数。


使用方法

直接在controller层封装好Pageable对象即可

@GetMapping("findBanners")
public Page<Banner> findBanners(@PageableDefault(sort = {"priority"}, direction=Sort.Direction.ASC) Pageable pageable)

如果前端不传page 和 size 这两个参数过来,那么@PageableDefault会默认为第1页开始,每页最大条数为10。需注意page为0时为第一页。


接着,直接在service层调用即可
这里写图片描述

返回给客户端的Page对象,其json格式为
{
“content”: [],//数据内容
“first”: true,//是否为第一页
“last”: true,//是否为最后一页
“number”: 0,//当前页码
“numberOfElements”: 0,//当前页中的实际数据条数
“size”: 0,//一页最大条数
“sort”: { },//排序信息
“totalElements”: 0,//总条数
“totalPages”: 0//总页数
}


你也可以自己手动创建Pageable对象
这里写图片描述


同时,通过Page.map方法,可以修改Page所含有的值。
这里写图片描述
convert方法将course集合中的每个course转为courseSimpleVo

toCourseSimpleVo方法将Course类转为CourseSimpleVo类
这里写图片描述


动态查询

现在有下图这种需求,需要通过不同的查询条件查询订单
这里写图片描述

因为查询参数的数量是不确定的,所以我们会在dao层写很多方法,这是非常不理想的。
用排列组合的方式,上面有5个不确定的查询参数,我们可能需要有30多种查询方法,就如下图
这里写图片描述

因此,这里给出一个解决方案,利用spring data jpa 中的 Specification接口

针对上述问题,我们创建一个OrderSpec类,里面创建查询参数
这里写图片描述

注:当orderType 为 null 时,则不会出现在 sql 查询语句中
类似的,我们把其他参数也加上
这里写图片描述
这里写图片描述

时间这里,做了空值处理

接着在Service层,即可创建查询
这里写图片描述


自定义SQL查询

其实Spring data 觉大部分的SQL都可以根据方法名定义的方式来实现,但是由于某些原因我们想使用自定义的SQL来查询,spring data也是完美支持的;在SQL的查询方法上面使用@Query注解,如涉及到删除和修改需要加上@Modifying.也可以根据需要添加 @Transactional 对事物的支持等。

这里写图片描述
这里写图片描述
这里写图片描述


多表查询

多表查询在spring data jpa中有两种实现方式,第一种是利用hibernate的级联查询来实现,第二种是创建一个结果集的接口来接收连表查询后的结果,这里主要第二种方式。
这里写图片描述


Spring data jpa 与 hibernate、mybatis 和其他持久层开源框架的关系

我的理解是:虽然ORM框架都实现了JPA规范,但是在不同ORM框架之间切换是需要编写的代码有一些差异,而通过使用Spring Data Jpa能够方便大家在不同的ORM框架中间进行切换而不要更改代码。并且Spring Data Jpa对Repository层封装的很好,可以省去不少的麻烦。
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值