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层: @[email protected]
Service层: @Transactional 注,根据项目需求及规范,只能在Service层添加事务,Dao层不建议使用
在Dao层使用@[email protected]
在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