栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringDataJPA

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringDataJPA

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

4.方法名规则查询

规则:

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/329025.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号