SpringDataJPA_02

SpringDataJPA简介

SpringDataJPA是Spring的基于ORM框架,它在JPA的基础上封装了一套JPA应用框架,可以使开发者用极简的代码即可实现数据库的访问和操作,它提供了包括CRUD在内的常用操作.
SpringDataJPA使开发者脱离了DAO层的操作,基本上所有的CRUD都可以用它来实现,一般使用SpringDataJPA+ORM框架(如:Hibernate)来实现操作,这样在切换ORM框架时及其方便,实现解耦.

JPA 和 Hibernate 和 SpringDataJPA

JPA是一种规范,其中主要是一些接口和抽象类.
Hibernate是JPA的一种实现方式,JPA的实现方式有很多.
SpringDataJPA是在JPA的基础上更高层次的封装
我们在使用的时候一般是使用SpringDataJPA中的接口,但是实际操作数据库的是Hibernate.

SpringDataJPA如何使用?

第一步:导入Maven坐标
第二步:如果使用SpringBoot则配置配置文件,如果不适用则需要编写配置文件
第三步:创建数据库
第四步:使用注解建立实体类和数据库表的映射关系
第五步:编写DAO层接口继承JpaRepository和JpaSpecification两个接口并且提供相应实体类的泛型

  • JpaRepository的泛型是<实体类,主键>,JpaSpecification的泛型是<实体类>这样我们的Dao层接口就有这两个父接口中的所有方法了,我们可直接使用.

SpringDataJPA原理分析

程序在运行的时候自动帮我们创建它的实现类,底层原理是动态代理.
通过JdkDynamicAopProxy代理类创建代理对象SimpleJpaRepository.

在SimpleJpaRepository类中实现了我们用到的方法,如findOne(),findAll()方法.其实在这个类中创建了JPA中的EntityManger对象,通过调用其中的方法实现CRUD.

复杂查询

1.jpa自带复杂查询方式

count():查询总数
exists():判断是否存在
findOne():调用JPA中的find()方法
getOne():调用JPA中的getReference()方法

2.jpql查询

步骤:

1.在Dao接口中定义方法
2.在方法上使用@Query(value=“jpql语句”)注解

*注意:

如果方法中的参数和Jpql语句中的占位符不一致,可使用"?索引"的方式进行绑定.
在进行更新操作时要使用@Query,@Modifying注解并且使用@Transactional注解添加事务支持,并且需要使用@Rollback(value=false)(因为在springDataJpa中执行更新或者删除操作的时候默认回滚事务,而不是提交).

3.SQL查询

步骤:

1.在Dao接口中定义方法
2.在方法上使用@Query(value=“Sql语句”)注解

需要注意的是:@Query还有一个属性nativeQuery,使用nativeQuery属性决定使用SQL还是JPQL,
当@nativeQuery(value=true)时候,使用本地查询即SQL查询,默认为false.

注意:在查询出来的是多条数据时返回类型时List<Object[]>

4.方法名规则查询

规则:

findByXXX,其中"XXX"为实体类中的属性名首字母大写.
findByXXX+“查询方式(like | isnull)”
findByXXX+"“查询方式”+“多条件连接符(and | or )”+ XXX + “查询方式”

它是对JPQL更深一层的封装,在运行时将方法名转为JPQL语句.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值