【Spring Data 系列学习】Spring Data JPA @Query 注解查询
山间木匠 人气:0
# 【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 JpaRepository
加载全部内容