天天看點

spring data jpa Repository接口

Repository 是一個空接口 即是一個标記接口
若我們定義的接口繼承了它。則該接口會被IOC容器識别為一個Repository Bean 納入到IOC容器中

也可以使用注解的方式@RepositoryDefinition()注解代替Repository接口

Person為對于實體類,Integer為主鍵類型
      
public interface PersonRepository extends CrudRepository<Person,Integer> {

}
           

 Repository接口下的方法定義規範:

1.查詢方法以get、find、read開頭
2.設計條件查詢時,條件的屬性用條件關鍵字連接配接 (條件屬性首字母要大寫)
3.支援屬性的級聯查詢,若目前類有符合條件的屬性,則優先使用,而不使用級聯屬性 若需要使用級聯屬性,則屬性之間用_進行連接配接      
Person getByName(String name);
           

使用@Query 可自定義JPSQL

@Query("select p from Person p where p.id = (select Max(p2.id) from Person p2)")
    List<Person> getMaxId();
           

使用使用@Query進行參數傳遞

(占位符方式)

@Query("select p from Person p where p.id= ?1 and p.name=?2")
    Person getQueryParam(Integer id,String name);
           
(參數命名方式)      
@Query("select p from Person p where p.id= :id and p.name=:name")
    Person getQueryParam2(@Param("id") Integer id,@Param("name") String name);
           

通過nativeQuery = true 來擷取原生本地sql

@Query(value = "select count(id) from person",nativeQuery = true)
    long getTotalCount();
           

使用@Modifying注解辨別這是一個 更新或删除操作  ,UPDATE和DELETE操作需要使用事務,是以我們要定義service層,在每個方法上定義事務(JPSQL不支援INSERT)

@Modifying
    @Query("update Person p set p.name=:name where p.id=:id")
    void updatePersonName(@Param("name") String name , @Param("id") Integer id);
    @Modifying
    @Query("delete  from Person p where p.id=:id")
    void deletePersonByid(@Param("id") Integer id);
           

繼續閱讀