这篇文章主要介绍“Spring Data JPA是什么及怎么使用”,在日常操作中,相信很多人在Spring Data JPA是什么及怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Spring Data JPA是什么及怎么使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!首先了解 JPA 是什么?JPA(Java Persistence API)是 Sun 官方提出的 Java 持久化规范。
它为 Java 开发人员提供了一种对象/关联映射工具来管理 Java 应用中的关系数据。它的出现主要是为了简化现有的持久化开发工作和整合 ORM 技术,
结束现在 Hibernate、TopLink、JDO 等 ORM 框架各自为营的局面。
值得注意的是,JPA 是在充分吸收了现有 Hibernate、TopLink、JDO 等 ORM 框架的基础上发展而来的,具有易于使用、伸缩性强等优点。
从目前的开发社区的反应上看,JPA 受到了极大的支持和赞扬,
其中就包括了 Spring 与 EJ免费云主机域名B 3.0 的开发团队。注意:JPA 是一套规范,不是一套产品,那么像 Hibernate、TopLink、JDO 它们是一套产品,如果说这些产品实现了这个 JPA 规范,那么就可以叫它们为 JPA 的实现产品。
Spring Data JPASpring Data JPA 是 Spring 基于 ORM 框架、JPA 规范的基础上封装的一套 JPA 应用框架,可使开发者用极简的代码即可实现对数据的访问和操作。它提供了包括增删改查等在内的常用功能,且易于扩展!学习并使用 Spring Data JPA 可以极大提高开发效率!Spring Data JPA 让我们解脱了 DAO 层的操作,基本上所有 CRUD 都可以依赖于它来实现。先上例子:编写Spring Data JPA Repository 的关键在于从一组接口中挑选一个进行扩展.如:添加注解能到达到不用 extends JpaRepository 的功能@RepositoryDefinition(domainClass = Employee.class, idClass = Integer.class)
这里,ProductCategoryRepository扩展了 JpaRepository 接口,稍后我们会介绍其它几个接口.通过这种方式,JPARepository 进行了参数化,所以它就能知道这是一个用来持久化 ProductCategoryEntity 的Repository.
并且id类型为 Integer .另外,它还会集成18个执行持久化操作的通用方法.在spring boot 中,如果使用了 spring-boot-starter-data-jpa ,会自动扫描所有扩展了Repository 接口的类,如果是Spring,则需要开启 Repository扫描因为 ProductCategoryRepository 扩展了 JpaRepository 接口,而 JpaRepository 接口又间接扩展了 Repository 接口,所以:
当Spring Data 扫描到它时,就会自动创建 ProductCategoryRepository 的实现类,其中包含了 JpaRepository ,PagingAndSortingRepository ,和CrudRepository的18个方法.很重要的一点就是,Repository的实现类是在应用启动的时候生成的,也就是Spring的应用上下文创建的时候.而不是通过代码生成技术产生的,也不是接口方法调用时才产生的这个接口提供了通用的CRUD操作有保存一个或多个, 查询一个或多个,删除一个或多个.值得一提的是: JPA中的更新操作你可以通过 先查询一个再保存来更新的.我们可以继承 CrudRepository 接口或者继承 JpaRepository接口,因为通过上面的类图,我们可以发现 JpaRepository接口本身已经继承了 CrudRepository只要 id一样,就会更新,而不是添加.这个接口很简单;Page findAll(Pageable pageable); 中Pageable 是一个接口,他有两个实现类,PageRequest和QPageRequest
常使用的是 PageRequest 和QPageRequestPageRequest 中方法如下:有两个常用的构造方法:需要注意的是,页数是从 0 开始的,即page=0 为第一页我们可以这样构造Pageable对象,使用 PageRequest(int page, int size)返回的是一个Page对象.举例说明:PageRequest还有一种构造方法 PageRequest(int page, int size, Sort sort)我们可以传进去一个 Sort对象,进行排序Sort对象的构造方法接受一个 Order对象Order对象是Sort 对象的一个内部类Order的构造方法有:Direction 是一个枚举类型支持升序和降序,如果不传 Direction对象,则使用默认排序规则 Direction DEFAULT_DIRECTION = Direction.ASC;
ASC(升序)好了,经过上面的了解,相信你已经会使用 Sort 了.例如:如果我们想按照多个字段进行排序呢?其实也很简单,上面我们知道,Sort有一个构造方法接收 List 类型参数,实例化多个Order对象,放在一个List 列表中即可.有一点需要注意的是:排序顺序按照添加到 列表中的顺序进行排序不属于Repository体系,实现一组 JPA Criteria 查询相关的方法Specification:封装 JPA Criteria 查询条件。通常使用匿名内部类的方式来创建该接口的对象由于JpaSpecificationExecutor 并不继承repository 接口,所以它不能单独使用,只能和jpa Repository 一起用。如何创建 ? 直接new 这个接口toPredicate 方法有三个参数:
Root,Root继承了From接口
CriteriaQuery,查询条件CriteriaBuilder,构建Predicate(断言),这个接口方法很多例如:Spring Data JPA 默认提供了 18个便利的方法进行通用的JPA操作.但是如果你的需求超过了它所提供的这18个方法,该怎么办呢?幸好,Spring Data JPA提供了几种方法来为Repository 添加自定义的方法.先看一个例子:“`javapublic interface ProductInfoRepository extends JpaRepository当创建 Repository 实现的时候,Spring Data会检查 Repository 接口的所有方法,解析方法的名称,并基于被持久化的对象来推测方法的目的.
本质上,Spring Data 定义了一组小型的领域特定语言(DSL),在这里持久化的细节都是通过 Repository的方法签名来描述的.findAllByProductName(String name) 方法非常简单,但是Spring Data也能处理更加有意思的方法签名.
Repoditory 方法是 由一个动词,一个可选主题,关键词By以及一个断言所组成.
在 findAllByProductName 方法中,动词是findAll ,断言是 ProductName,主题并没有指定,暗含就是 ProductInfoEntity.Spring Data 允许在方法中使用四种动词: get ,read, find , count . 其中动词 get, read,find 是同义的,这三个动词对用的Repository方法都会查询数据并返回对象.
.而动词 count 则会返回匹配对象的数量,而不是对象本身.Repository 方法的主题是可选的,它主要是让你命名方法的时候有很多的灵活性,findAllByProductName和findAllProductInfoEntityByProductName方法没有什么区别.
要查询的对象的类型是通过如何参数化 Repository 接口来决定的,而不是方法名称中的主题.不过,Spring Data 这个小型的DSL依旧有其局限性,有时候通过方法名表达预期的查询很繁琐,甚至无法实现.如果与呆这种情况,Spring Data能让我们通过#Query注解来解决问题当然还可以使用原生SQL语句进行查询,只需要 nativeQuery = true 即可更新操作注意事项:使用Query注解写更新JPA语句添加 @Modifying 注解在service层添加事物 @Transactional到此,关于“Spring Data JPA是什么及怎么使用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注百云主机网站,小编会继续努力为大家带来更多实用的文章!
本文小编为大家详细介绍“C语言入门代码实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言入门代码实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。——代码的运行1只会从main函数开始执行,从上到下,逐行运行。2一个…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。