什么是SpringDataJpa
MyBatis:Apache的一个开源项目,上手简单,开发灵活,现在市场占有率高; 但是开发时工作量比较大,需要做很多配置,并且自己要写SQL语句。
Hibernate:一个开放源代码的对象关系映射框架,是完全面向对象的。可以使用面向对象的思路来完成数据库操作。 Hibernate是完备的ORM框架(咱们之前学习JPA,底层就是使用Hibernate完成的)。
SpringDataJpa的基本使用
- 引入项目中所需要的所有包(pom.xml)
- 配置applicationContext.xml文件
- 准备Domain
- 完成Repository的功能
- 完成Repository的功能
SpringDataJpa的认识与使用
了解SpringDataJpa
1.它是JPA规范的再次封装抽象,底层还是使用了Hibernate的JPA技术实现,引用JPQL的查询语句 ,是属于Spring的生成体系中的一部分。SpringDataJpa使用起来比较方便,加快了开发的效果,使开发人员不需要关心和配置更多的东西。
2.SpringDataJpa上手简单,开发效率高,对对象的支持非常好,还十分的灵活。
3.Spring Data项目是从2010年开发发展起来的,是一个用于简化数据库访问,并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快捷,并支持map-reduce框架和云计算数据服务。 Spring Data 包含多个子项目:
Commons - 提供共享的基础框架,适合各个子项目使用,支持跨数据库持久化
JPA - 简化创建 JPA 数据访问层和跨存储的持久层功能
Hadoop - 基于 Spring 的 Hadoop 作业配置和一个 POJO 编程模型的 MapReduce 作业
Key-Value - 集成了 Redis 和 Riak ,提供多个常用场景下的简单封装
Document - 集成文档数据库:CouchDB 和 MongoDB 并提供基本的配置映射和资料库支持
Graph - 集成 Neo4j 提供强大的基于 POJO 的编程模型
Graph Roo AddOn - Roo support for Neo4j
JDBC Extensions - 支持 Oracle RAD、高级队列和高级数据类型
Mapping - 基于 Grails 的提供对象映射框架,支持不同的数据库
Examples - 示例程序、文档和图数据库
Guidance - 高级文档
SpringData的结构图
JpaRepository的基本功能
1.普通的CRUD
2.分页排序功能
3.根据条件进行查询
4.@Query注解查询
JpaSpecificationExecutor的认识
Specification:[ˌspɛsəfɪˈkeʃən]
Executor:[ɪgˈzekjətə®]
Criteria:美 [kraɪˈtɪrɪə]
JpaSpecificationExecutor(JPA规则执行者)是JPA2.0提供的Criteria [(批评、判断等的) 标准,准则( criterion的名词复数 )
Criteria 查询:是一种类型安全和更面向对象的查询 。]API的使用封装,可以用于动态生成Query来满足我们业务中的各种复杂场景。
Spring Data JPA为我们提供了JpaSpecificationExecutor接口,只要简单实现toPredicate方法就可以实现复杂的查询。
JpaSpecificationExecutor的使用
1.单个条件的查询
2.多个条件查询
3.条件查询+分页排序
Spring Data Jpa扩展
Spring Data Jpa功能虽然已经非常强大,但是它依然满足不了咱们的需要,在很多时候,我们需要自己去对SpringDataJpa的功能进行相应的扩展(即:自定义Repository)。
1.BaseRepository接口:直接创建BaseRepository来继承JpaRepository接口
2.BaseRepositoryImpl功能实现:
定义好自定义的方法后,我们现在通过一个基本的Repository类来实现该方法:
首先添加BaseRepositoryImpl类,继承SimpleJpaRepository类,使其拥有Jpa Repository的基本方法。
我们发现Repository有两个构造函数:
SimpleJpaRepository(JpaEntityInformation entityInformation, EntityManager entityManager)
SimpleJpaRepository(Class domainClass, EntityManager em)
这里我们实现第二个构造函数,拿到domainClass和EntityManager两个对象。
3.创建自定义创建自定义RepositoryFactoryBean
接下来我们来创建一个自定义的RepositoryFactoryBean来代替默认的RepositoryFactoryBean。
RepositoryFactoryBean负责返回一个RepositoryFactory,Spring Data Jpa 将使用RepositoryFactory来创建Repository具体实现,这里我们用BaseRepositoryImpl代替SimpleJpaRepository作为Repository接口的实现。这样我们就能够达到为所有Repository添加自定义方法的目的。
我们需要覆写创建RepositoryFactory的方法:createRepositoryFactory