SpringBoot整合Spring Data JPA(一)
一、OverView
JPA(Java Persistence API)是Sun官方提出的Java持久化规范。它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据。
Spring Data JPA 是 Spring 基于 ORM 框架、JPA 规范的基础上封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据的访问和操作。它提供了包括增删改查等在内的常用功能,且易于扩展!学习并使用 Spring Data JPA 可以极大提高开发效率!
spring data jpa让我们解脱了DAO层的操作,基本上所有CRUD都可以依赖于它来实现
二、环境搭建
pom.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency>
|
application.properties
1 2 3 4 5 6 7 8 9 10 11 12
| spring.datasource.url=jdbc:mysql://localhost:3306/jpa spring.datasource.username=root spring.datasource.password= spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.database=mysql
spring.jpa.show-sql=true
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.hibernate.ddl-auto=update
|
entiy
Student
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| @Entity @Table(name = "student") public class Student {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id", columnDefinition = "INT UNSIGNED COMMENT '自增主键'") private Long id;
@Column(name = "name", columnDefinition = "VARCHAR(50) NOT NULL COMMENT '用户名'") private String name;
@Column(name = "pwd", columnDefinition = "VARCHAR(100) DEFAULT NULL COMMENT '密码'") private String pwd;
}
|
Grade
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| @Entity @Table(name = "grade") public class Grade {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id", columnDefinition = "INT UNSIGNED COMMENT '自增主键'") private Long id;
@Column(name = "subject", columnDefinition = "VARCHAR(50) NOT NULL COMMENT '学科'") private String subject;
@Column(name = "score", columnDefinition = "TINYINT UNSIGNED NOT NULL COMMENT '成绩'") private String score;
}
|
注:这次使用两个表,为了后面进行复杂查询准备,这里的将两个表的自增 id 关联在一起,就不考虑多对多了
repository
StudentRepository
1 2 3
| @Repository public interface StudentRepository extends JpaRepository<Student, Long>, JpaSpecificationExecutor<Student> { }
|
GradeRepository
1 2 3
| @Repository public interface GradeRepository extends JpaRepository<Grade, Long>, JpaSpecificationExecutor<Grade> { }
|
在上次 aop 那里面就提过,由于继承的有 CRUD 的 repository 和一些其他的,这也是上面提到的解放 DAO 层的操作,具体的可以看下图
三、CRUD
controller
GradeController
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| @RestController @RequestMapping("/grade") public class GradeController {
private GradeRepository gradeRepository;
@Autowired public void setGradeRepository(GradeRepository gradeRepository) { this.gradeRepository = gradeRepository; }
@PutMapping("/add") public Grade add(@RequestBody Grade grade) { return gradeRepository.save(grade); }
@GetMapping("/query") public List<Grade> query() { return gradeRepository.findAll(); }
@PostMapping("/update") public Grade update(@RequestBody Grade grade) { return gradeRepository.save(grade); }
@DeleteMapping("/delete") public void delete(@RequestParam Long id) { gradeRepository.deleteById(id); } }
|
StudentController
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| @RestController @RequestMapping("/student") public class StudentController {
private StudentRepository studentRepository;
@Autowired public void setStudentRepository(StudentRepository studentRepository) { this.studentRepository = studentRepository; }
@PutMapping("/add") public Student add(@RequestBody Student student) { return studentRepository.save(student); }
@GetMapping("/query") public List<Student> query() { return studentRepository.findAll(); }
@PostMapping("/update") public Student update(@RequestBody Student student) { return studentRepository.save(student); }
@DeleteMapping("/delete") public void delete(@RequestParam Long id) { studentRepository.deleteById(id); }
}
|
注:
Postman测试
增


查


改


删

