DAY29.2 Java核心基础
Spring Boot 整合 Spring Data JPA
Spring Data JPA根据具体的数据库分为不同的子模块,无论是关系型数据库和非关系型数据库,Spring Data都提供了支持
Mysql:Spring Data JPA
Redis:Spring Data Redis
什么是 Spring Data JPA
是 Spring Data 家族的一部分,使得基于 JPA 的存储变得更加方便
什么是 JPA?
Java Persistence API Java 持久层规范,在现有的 ORM 框架基础上发展而来的,易于使用,扩展性强,JPA 包含 3 部分内容:
1、ORM 映射元数据:支持 XML 和注解两种元数据的形式
2、API:操作实体对象来执行 CRUD 操作
3、查询语言:通过面向对象而非面向数据库的查询语言查询数据,避免程序的 SQL 耦合度过高
JPA(Java Persistence API) 是一套由 Java 官方定义的 ORM(对象关系映射)规范,它只是定义了一组接口和规范,无法直接使用。要使用 JPA,必须依赖其具体实现,比如 Hibernate 就是最常用的 JPA 实现框架之一。
Spring Data JPA 是 Spring 提供的基于 JPA 的数据访问抽象框架,它对 JPA 进行了进一步封装,简化了数据访问层的开发。使用 Spring Data JPA,开发者只需定义接口,遵循一定的命名规则,就可以实现常见的数据库 CRUD 操作,而无需编写接口的实现类。需要注意的是,Spring Data JPA 并不直接操作数据库,它仍然依赖 Hibernate 等 JPA 实现作为底层支撑。
关于 Spring Data JPA 与 Spring JdbcTemplate 的关系与区别:
- 二者没有直接关联,它们是两种不同的数据访问方式。
- Spring JdbcTemplate 是基于原生 JDBC 的封装,提供了一套简洁的模板方法,简化了数据库操作中的样板代码,但依然需要手动编写 SQL。
- Spring Data JPA 则是基于 ORM 的方式,通过实体映射和接口定义来完成数据库操作,通常不需要写 SQL(除非自定义查询)。
简单对比:
特性 | Spring Data JPA | Spring JdbcTemplate |
---|---|---|
编程方式 | 面向对象(基于实体类和接口) | 面向过程(基于 SQL) |
是否需写 SQL | 一般不需要,除非自定义查询 | 需要手写 SQL |
底层依赖 | JPA 实现(如 Hibernate) | 原生 JDBC |
使用复杂度 | 较高层次,易上手 | 灵活但略繁琐 |
总结来说,Spring Data JPA 适合需要快速开发、模型清晰的场景,而 Spring JdbcTemplate 则适用于需要灵活控制 SQL 或操作复杂查询逻辑的场景。
1、导入依赖
xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
2、创建实体类,映射到数据库表,Spring Data JPA常用的注解有
- @Id:将成员变量与数据库表的主键进行映射
- @Entity:将实体类与数据库表进行映射
- @GeneratedValue:表示自动生成主键,strategy 为主键生成策略,一般是自增
- @Column:将实体类中的成员变量和数据表中的普通字段进行映射
java
@Entity(name = "people")
public class People {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column
private String name;
@Column
private Integer age;
}
strategy 的策略区别:
策略 | 原理 | 依赖数据库 | 是否支持批量 | 性能 | 建议使用场景 |
---|---|---|---|---|---|
IDENTITY | 数据库自增 | 是 | 否 | 中等 | MySQL/SQLServer 主键生成 |
SEQUENCE | 数据库序列 | 是 | 是 | 高 | Oracle/PostgreSQL,支持高并发 |
TABLE | 表模拟序列 | 否 | 否 | 低 | 数据库无序列但需跨库兼容 |
AUTO | 自动选择(依赖实现) | 是 | 视情况而定 | 不确定 | 快速开发/入门,但不适用于复杂系统 |
3、创建接口,基础父类JpaRepository,直接继承即可,Spring Data Jpa是一个全自动的框架,底层是Hibernate的框架,直接使用接口,不需要自己写sql
java
public interface PeopleDao extends JpaRepository<People,Integer> {
}
4、控制层Controller(基本的增删改查)
java
@RestController
@RequestMapping("/people")
public class PeopleController {
@Autowired
private PeopleDao peopleDao;
@GetMapping("/findAll")
public String findAll(){
return peopleDao.findAll().toString();
}
@GetMapping("/findById/{id}")
public String findById(@PathVariable("id") Integer id){
return peopleDao.findById(id).toString();
}
@PostMapping("/add")
public People add(@RequestBody People people){
return peopleDao.save(people);
}
@PutMapping("/save")
public People save(@RequestBody People people){
return peopleDao.save(people);
}
@DeleteMapping("/delete/{id}")
public String delete(@PathVariable("id") Integer id){
peopleDao.deleteById(id);
return "删除成功";
}
}