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 "删除成功";
    }
}
相关推荐
Maỿbe26 分钟前
阻塞队列的学习以及模拟实现一个阻塞队列
java·数据结构·线程
we风1 小时前
【SpringCache 提供的一套基于注解的缓存抽象机制】
java·缓存
趙卋傑3 小时前
网络编程套接字
java·udp·网络编程·tcp
两点王爷4 小时前
Java spingboot项目 在docker运行,需要含GDAL的JDK
java·开发语言·docker
万能螺丝刀16 小时前
java helloWord java程序运行机制 用idea创建一个java项目 标识符 关键字 数据类型 字节
java·开发语言·intellij-idea
zqmattack6 小时前
解决idea与springboot版本问题
java·spring boot·intellij-idea
Hygge-star6 小时前
【Java进阶】图像处理:从基础概念掌握实际操作
java·图像处理·人工智能·程序人生·职场和发展
Honmaple6 小时前
IDEA修改JVM内存配置以后,无法启动
java·ide·intellij-idea
小于村7 小时前
pom.xml 文件中配置你项目中的外部 jar 包打包方式
xml·java·jar
Tom@敲代码7 小时前
Java构建Tree并实现节点名称模糊查询
java