SpringDataJpa

1.集成Spring+SpringDataJpa
(1)引入项目中所需要的所有包(pom.xml)
(2)配置applicationContext.xml文件,创建jdbc.properties
(3)准备domain对象,其中domain对象可以抽取公共的部分,让其他的实体类来继承它,上面加上@MappedSuperclass这个注解是代表这个类是父类,不会进行映射

(4)在Repository包下创建一个接口(相当于dao层)继承JpaReppsitory

(5)测试集成是否成功:自定义接口调用增删改查方法测试
2.SpringDataJpa的认识和使用
(1)SpringDataJpa的结构
①七个Repository接口
Repository(org.springframework.data.repository.Repository)
CrudRepository(org.springframework.data.repository.CrudRepository)
PagingAndSortingRepository(org.springframework.data.repository.PagingAndSortingRepository)
JpaRepository (org.springframework.data.jpa.repository.JpaRepository)
QueryByExampleExecutor(org.springframework.data.repository.query.QueryByExampleExecutor)
JpaSpecificationExecutor (org.springframework.data.jpa.repository.JpaSpecificationExecutor)
QueryDslPredicateExecutor (org.springframework.data.querydsl.QueryDslPredicateExecutor)
②两个Repository实现类
SimpleJpaRepository(org.springframework.data.jpa.repository.support.SimpleJpaRepository)
QueryDslJpaRepository(org.springframework.data.jpa.repository.support.QueryDslJpaRepository)
(2)JpaRepository这个接口继承了PagingAndSortingRepository和CrudRepository两个接口,三个接口的功能
①CrudRepository:完成所有基本的增删改查的方法,其中泛型的T是要操作的实体类,ID是实体类主键的类型。
②PagingAndSortingRepository:完成分页与排序功能
③JpaRepository这个接口继承了PagingAndSortingRepository接口
(3)JpaRepository的基本功能
①普通的crud
②分页排序功能
1)分页不排序:新建一个page(分页对象),在查询的时候将分页对象传进去
//新建一个page对象
Pageable pageable = new PageRequest(0,10);
2)分页排序:新建一个sort(排序对象)和page对象,使用如下
//排序 :第一个参数是排序的规则(DESC/ASC) 后面参数是排序的字符
Sort sort = new Sort(Sort.Direction.DESC,“username”);
Pageable pageable = new PageRequest(0, 10,sort);
3)根据条件进行查询
a.在接口里面按照规范创建查询方法,按照java里面的驼峰命名规范,它会通过反射得到命名的关键字来发出sql语句查询

b.@Query注解查询:直接将注解加到方法上即可
a)在@Query(这里加入jpql语句)
b)原生态的写法:在@Query(这里加入jpql语句,nativeQuery=true)

3.JpaSpecificationExecutor的认识
(1)在使用这个接口的方法时,要让我们的接口也去继承这个接口,注意:所有查询都需要传入一个Specification对象
(2)创建Specification对象时有三个参数,意思分别是:
①Root:查询哪个表,可以查询和操作的实体的根
②CriteriaQuery:查询哪些字段,排序是什么(主要是把多个查询的条件连系起来)
③CriteriaBuilder:字段之间是什么关系,如何生成一个查询条件,每一个查询条件都是什么方式,主要判断关系

④链式结构

4.BaseQuery:公共的分页条件,别的类就直接继承这个类
(1)当前页currentPage,每页条数pageSize

(2)排序方式

(3)使用抽象约束,必须要覆写该方法,获取Specification对象

(4)获取排序方法,当名字排序不为null时,判断排序的字符串是否与默认的”desc”相等,相等就是desc,不相等就是asc

(5)提供一个方法解决前端传来的当前首页是1,但是后端分页是从0开始的问题

5.SpringDataJpa扩展
(1)创建BaseRepository接口作为父接口来继承JpaRepository<T,ID>, JpaSpecificationExecutor,里面写三个方法,其他要使用这两个接口方法的接口都直接继承该接口,在父接口打上@NoRepositoryBean表示不扫描该接口

(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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值