1. 程式人生 > >【Spring Data 系列學習】Spring Data JPA @Query 註解查詢

【Spring Data 系列學習】Spring Data JPA @Query 註解查詢

# 【Spring Data 系列學習】Spring Data JPA @Query 註解查詢 前面的章節講述了 Spring Data Jpa 通過宣告式對資料庫進行操作,上手速度快簡單易操作。但同時 JPA 還提供通過註解的方式實現,通過將 `@Query` 註解在繼承 repository 的介面類方法上 。 **Query 原始碼講解** ```java public @interface Query { /** * 指定 JPQL 的查詢語句。(nativeQuery = true)是原生的 SQL 語句. */ String value() default ""; /** * 指定 count 的 JPQL 語句,如果不指定將根據 query 自動生成。 * (nativeQuery = true 的時候,是原生查詢的 SQL 語句) */ String countQuery() default ""; /** *根據那個欄位來 count,一般預設即可。 */ String countProjection() default ""; /** * 預設是 false,表示 value 裡面是不是原生的 SQL 語句 */ boolean nativeQuery() default false; /** * 可以指定一個 query 的名字,必須是唯一的。 * 如果不指定,預設的生成規則是 * {$domainClass}.${queryMethodName} */ String name() default ""; /** * 可以指定一個 count 的query 名字,必須是唯一的。 * 如果不指定,預設的生成規則是: * {$domainClass}.${queryMethodName}.count */ String countName() default ""; } ``` ## 快速上手 **專案中的`pom.xml`、`application.properties`與 Chapter1 相同** **實體類對映資料庫表** **user 實體類** ```java @Entity @Table(name = "t_user") public class User implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "u_name") private String name; @Column(name ="u_age") private Integer age; @Column(name ="u_email") private String email; // 省略構造器 set/get } ``` `@Entity`:定義物件將會成為被JPA管理的實體,將對映到指定的資料庫表。 `@Table` :指定資料庫的表名。 `@Column`:定義該屬性對應資料庫中的列名。 `@Id` 定義屬性為資料庫的主鍵,一個實體裡面必須有一個。 `@GeneratedValue(strategy = GenerationType.IDENTITY)` 自增長 ID 策略 生成如下: ![image-20200301143239501](https://img2020.cnblogs.com/other/1953867/202003/1953867-20200315202934545-943763075.png) ## @Query 查詢 ### 基本使用 **繼承 UserQueryRepository** ```java public interface UserQueryRepository extends JpaRe