【知識庫】-簡單理解CrudRepository接口中的方法


 

 

CrudRepository中的方法(這個接口提供了基本增刪改查方法)

  • save(entity):添加一條數據
  • save(entities):添加多條數據entities為集合
  • findOne(id):根據id查詢一條數據
  • exists(id):判斷id是否存在
  • findAll():查詢全部數據
  • delete(id):根據id刪除數據
  • delete(entity):根據一條數據的信息刪除數據
  • delete(entities):根據多條數據的信息刪除數據
  • deleteAll():刪除全部信息

 

一、Repository接口

  是什么

    1、Repository是一個空接口,即:是一個標記接口,表示任何繼承它的接口都是倉庫接口類。

    2、若我們繼承了Repository,則該接口會被Ioc容器表示為一個Repository Bean,放入到IOC容器中,進而可以在該接口中定義滿足一定規范的方法。

    3、實際上也可以通過@RepositoryDefinition(domainClass = Person.class, idClass = Long.class)來替代繼承Repository接口。

  子接口

    1、CrudRepository:繼承Repository,實現一組CURD相關的方法

    2、PagingAndSortingRespository:繼承CrudRepository,實現了一組分頁排序相關的方法

    3、JpaRepository:繼承PagingAndSortingRespository,實現了一組JPA規范相關的方法

    4、自定義的XxxRepository:需要繼承JpaRepository,這樣該接口就具備了通用的數據訪問控制層的能力

    5、JpaSpecificationExecutor:不屬於Repository體系,實現一組 JPA Criteria 查詢相關的方法

 

 

二. 注解

  1、@Query

    1、可以執行自定義的JPQL語句以更靈活的查詢

// 查詢id最大的那個person
@Query("from Person p1 where p1.id = (select max(p2.id) from Person p2)")
Person getPersonByMaxId();

    2、注解傳遞參數

      1、使用占位符:參數順序必須和JPQL中的順序一致

@Query("from Person p where p.name = ?1 and p.gender = ?2")
Person query_getPersonByNameAndGender(String name, String gender);

      2、使用命名參數:這種寫法可以隨便設置參數順序

@Query("from Person p where p.name = :name and p.age = :age")
Person query_getPersonByNameAndAge(@Param("age") Integer age, @Param("name") String name);
  • @Param:org.springframework.data.repository.query.Param;

      3、spring data允許在占位符上添加%(適用於模糊查詢like:%占位符%)

      4、@Query支持原生sql查詢

@Query(value = "select count(1) from t_person", nativeQuery = true)
Long getTotal();

  

  2、@Modifying:可以使用該注解來實現通過JPQL修改和刪除(JPQL不支持添加

@Modifying
@Query(value = "update Person p set p.name = ?1, p.age = ?2 where p.id = ?3")
void updatePerson(String name, Integer age, Long id);
  • 注意:更新和刪除操作需要事務支持
  • 在@Query中編寫JPQL語句,但是必須添加@Modifying進行修飾來告訴JPA這是修改的操作
  • 為什么@Query可以執行呢?
  • 所有的Repository方法都有一個事務,但是卻是只讀事務


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM