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);