基本用法
Spring Data JPA 的基本使用方法
使用 Spring Data JPA,你需要定义两类东西:
Entity
Repository
定义实体:
package cn.com.iamddch.sia1;
import lombok.*;
import org.hibernate.Hibernate;
import javax.persistence.*;
import java.util.Objects;
@Entity
@Getter
@Setter
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(nullable = false)
private Long id;
private String name;
private Integer age;
}
需要注意,@Entity
@Id
@GeneratedValue
@Column
等注解必须都来自 javax.persistence
。
使用 @Getter
@Setter
来标记实体类,而不是 @Data
。
Using @Data for JPA entities is not recommended. It can cause severe performance and memory consumption issues.
Student
类会被映射到数据库表 student
,实例域也会被映射到与其名字相同的数据库表的列。注意,实例域之所以可以产生同名列映射,不是因为其实例域的名字,而是来自 getter 或 setter 方法。
定义 Repository:
package cn.com.iamddch.sia1;
import org.springframework.data.jpa.repository.JpaRepository;
public interface StudentRepository extends JpaRepository<Student, Long> {}
你没看错,不需要额外操作,只需简单地新建一个 StudentRepository
接口,继承 JpaRepository
,并且填入该 Repository 管理的实体类和实体的主键类型即可。
由于继承了 JpaRepository
,参照上一节我们提到的派生关系,StudentRepository
会拥有许多预定义的方法,所以不必我们自己编写。
JpaRepository
默认实现的常用方法有:
repo.findAll();
repo.save(object);
repo.delete(object);
repo.delete(id);
repo.findOne(id);
repo.deleteAll();
repo.existes(id); // boolean
注意:编写 Spring Data JPA 的 Repository 不需要使用 @Repository
注解!
使用 Repository:
package cn.com.iamddch.sia1;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/student")
public class StudentController {
// 注入 Repository
private final StudentRepository studentRepository;
@Autowired
public StudentController(StudentRepository studentRepository) {
this.studentRepository = studentRepository;
}
@GetMapping("/all")
public List<Student> getAllStudent() {
return studentRepository.findAll();
}
@PostMapping("/add")
public void addStudent(@RequestBody Student student) {
if (student.getId() != null) {
// client should not specify id
student.setId(null);
}
studentRepository.save(student);
}
}
使用 Spring Data JPA 简单且优雅,你不需要自己编写 .sql
文件来建表,因为 Spring Data JPA 会依照实体类自动生成;你也不需要自己编写 SQL 查询语句,因为 Spring Data JPA 已经预定义了很多基础操作,而自己添加一些查询也可以不需要编写 SQL 语句(之后你将看到)。不是每一个后端开发者都是 DBA (Database Administrator),而 Spring Data JPA 就是你最好的选择。
最后更新于