导读:文章目录 Spring Data Annotations @Transactional @NoRepositoryBean @Param @Id @Transient @CreatedBy,@LastModifiedBy,@CreatedDate,@LastModifiedDate Spring Data JPA Annotations @Query @Procedure @Lock @Modifying @EnableJpaRepositories Spring
@Query("FROM Person p WHERE p.name = :name")
Person findByName(@Param("name") String name);
@Id
@Id表示Entity的primary key:
classPerson{@Id
Long id;// ...}
@Transient
通过使用@Transient, 表明Entity的某个字段是不需要被存储的。
classPerson{// ...@Transientint age;// ...}
@CreatedBy,@LastModifiedDate
通过这些注解,我们可以从principals中获得相应的数据:
publicclassPerson{// ...@CreatedBy
User creator;@LastModifiedBy
User modifier;@CreatedDate
Date createdAt;@LastModifiedDate
Date modifiedAt;// ...}
因为需要使用到principals,所有这些注解是和Spring Security配合使用的。
Spring Data JPA Annotations
Spring Data JPA Annotations是来自于spring-data-jpa包的。
@Query
通过使用@Query, 我们可以自定义sql语句:
@Query("SELECT COUNT(*) FROM Person p")longgetPersonCount();
我们也可以传递参数:
@Query("FROM Person p WHERE p.name = :name")
Person findByName(@Param("name") String name);
我们还可以使用native SQL查询:
@Query(value ="SELECT AVG(p.age) FROM person p", nativeQuery =true)intgetAverageAge();
@Procedure
通过@Procedure, 我们可以调用数据库中的存储过程:
@NamedStoredProcedureQueries({@NamedStoredProcedureQuery(
name ="count_by_name",
procedureName ="person.count_by_name",
parameters ={@StoredProcedureParameter(
mode = ParameterMode.IN,
name ="name",
type = String.class),@StoredProcedureParameter(
mode = ParameterMode.OUT,
name ="count",
type = Long.class)})})classPerson{}