各種Repository接口繼承關系:
Repository :
public interface UserRepository extends Repository<User, Integer> {
}
- 方法命名規則查詢方式:
findByNameLike(String name)
findByName(String name)
findByNameAndAge(String name, Integer age)
findByNameOrAddress(String name)
...
參考:
https://www.jianshu.com/p/1d6f27f675bb
https://www.jianshu.com/p/1d6f27f675bb
-
基於@Query注解的查詢和更新
-
基於@Query注解的查詢
-
JPQL 方式
@Query("form User WHERE name = ?1") List<User> findByName(String name);
ps: JPQL 占位符索引是從1開始的。
-
SQL 方式
@Query("select * from User WHERE name = ?1") List<User> findByName(String name);
-
-
基於@Query注解的更新
基於@Query注解的更新需要增加@Modifying
-
JPQL 方式
@Query("Update User set name = ?1 WHERE id = ?2") @Modifying int updateNameAndId(String name, Integer id);
-
SQL 方式
@Query("update user set name = ?1 WHERE id = ?2") @Modifying int updateNameAndId(String name, Integer id);
-
-
CrudReposiroty :
CrudRepository: 主要是進行增刪改查的方法
PagingAndSortingRepository :
PagingAndSortingRepository: 主要是進行排序或者分頁
JPARepository
JPARepository: 主要對繼承父接口中方法的返回值進行了適配,因為在父類接口中通常都返回迭代器,需要我們自己進行強制類型轉化。而在JpaRepository中,直接返回了List
JpaSpecificationExecutor
JpaSpecificationExecutor: 主要提供了多條件查詢的支持,並且可以在查詢中添加分頁和排序。
總結 :
Spring Data Jpa中一共提供了
Repository:
-
支持方法命名查詢 (提供了findBy + 屬性方法 )
-
@Query
HQL: nativeQuery 默認false
SQL: nativeQuery 默認true
更新的時候,需要配合@Modifying使用
CurdRepository:
繼承了Repository 主要提供了對數據的增刪改查
PagingAndSortRepository:
繼承了CrudRepository 提供了對數據的分頁和排序,缺點是只能對所有的數據進行分頁或者排序,不能做條件判斷
JpaRepository:
繼承了PagingAndSortRepository,開發中經常使用的接口,主要繼承了PagingAndSortRepository,對返回值類型做了適配
JpaSpecificationExecutor
提供多條件查詢