Spring Boot 整合 Spring Data JPA、strategy 的策略区别、什么是 Spring Data JPA

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 "删除成功";
    }
}
相关推荐
乐观甜甜圈1 分钟前
JDK8 中线程实现方法与底层逻辑详解
java
尤物程序猿5 分钟前
Java如何不建表完成各种复杂的映射关系(鉴权概念、区域概念、通用概念)
java·开发语言
cike_y17 分钟前
JSP内置对象及作用域&双亲委派机制
java·前端·网络安全·jsp·安全开发
也许是_19 分钟前
大模型应用技术之 Spring AI 2.0 变更说明
java·人工智能·spring
xunyan623434 分钟前
面向对象(下)-内部类的分类
java·学习
巴拉巴拉~~42 分钟前
KMP 算法通用进度条组件:KmpProgressWidget 多维度 + 匹配进度联动 + 平滑动画
java·服务器·前端
Yeniden1 小时前
Deepeek用大白话讲解 --> 迭代器模式(企业级场景1,多种遍历方式2,隐藏集合结构3,Java集合框架4)
java·开发语言·迭代器模式
景川呀1 小时前
Java的类加载器
java·开发语言·java类加载器
yaoxin5211231 小时前
274. Java Stream API - 过滤操作(filter):筛选你想要的数据
java·windows