一 瞭解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