SpringData--Repository接口及其子接口的应用-4

一 了解Repository接口

Repository是Spring Data的核心接口,是类似于Serializable的标志接口.

可以通过两种方式提供实现:

1-继承

2-注解

测试:

 

3-Repository的查询方法定义规则

 

 

 

 

 

弊端:

a-方法名比较长

b-对于复杂查询,依然难以实现

解决方案:@Query注解的应用

 

4- @Query注解

在Repository接口中使用,不需要遵循查询方法命名规则,使用非常灵活,常用.

案例1:查询最大id的user信息

 

案例2:根据参数条件查询用户信息

写法1:

 

写法2:

 

案例3:like的应用

 

案例4:原生SQL的使用

 

 

5- 增删改操作(必须结合事务)

Dao层: @Modifying+@Query

Service层: @Transactional 注,根据项目需求及规范,只能在Service层添加事务,Dao层不建议使用

在Dao层使用@Modifying+@Query

在Service层使用@Transactional

测试Service

 

 

二 Repository的子接口

设置好快捷键后

可以看到Repository的子接口和子类.

 

*********************SpringData的高级应用**************************

 

三 CurdRepository接口

 

案例:向表中保存数据或保存数据集合

a-更为ORM映射的表名称(新建表)

 

b-实现Dao层CRUD功能,通过继承CrudRepository

 

 

发现CrudRepository接口中的方法大部分都是DML操作,因此,需要放到Service中加入事务注解@Transactional才能进行测试.

c-编写Service,进行测试

 

 

四 PagingAndSortingRepository接口(实现分页和排序)

 

实际拥有的方法如下:

案例:实现排序及分页功能

编写测试类:

测试功能1:排序

测试功能2:分页

测试功能3:排序后进行分页

 

五 JpaRepository接口

接口方法定义:

@NoRepositoryBean public interface JpaRepository<T, ID extends Serializable> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> { List<T> findAll(); List<T> findAll(Sort var1); List<T> findAll(Iterable<ID> var1); <S extends T> List<S> save(Iterable<S> var1); void flush(); <S extends T> S saveAndFlush(S var1); void deleteInBatch(Iterable<T> var1); void deleteAllInBatch(); T getOne(ID var1); <S extends T> List<S> findAll(Example<S> var1); <S extends T> List<S> findAll(Example<S> var1, Sort var2); }

所有方法如下:

案例:测试getOne

 

 

六 JpaSpecificationExecutor接口

Specification封装了JPA Criteria查询条件

案例:能够执行[分页]+[排序]+[追加查询条件]

 

 

 

案例源代码:

SpringDataDemo

3.rar

27.52KB

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章