当前位置: 首页 > news >正文

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 JPASpring JdbcTemplate
编程方式面向对象(基于实体类和接口)面向过程(基于 SQL)
是否需写 SQL一般不需要,除非自定义查询需要手写 SQL
底层依赖JPA 实现(如 Hibernate)原生 JDBC
使用复杂度较高层次,易上手灵活但略繁琐

总结来说,Spring Data JPA 适合需要快速开发、模型清晰的场景,而 Spring JdbcTemplate 则适用于需要灵活控制 SQL 或操作复杂查询逻辑的场景。

1、导入依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

2、创建实体类,映射到数据库表,Spring Data JPA常用的注解有

  • @Id:将成员变量与数据库表的主键进行映射
  • @Entity:将实体类与数据库表进行映射
  • @GeneratedValue:表示自动生成主键,strategy 为主键生成策略,一般是自增
  • @Column:将实体类中的成员变量和数据表中的普通字段进行映射
@Entity(name = "people")
public class People {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Integer id;@Columnprivate String name;@Columnprivate Integer age;
}
strategy 的策略区别:
策略原理依赖数据库是否支持批量性能建议使用场景
IDENTITY数据库自增中等MySQL/SQLServer 主键生成
SEQUENCE数据库序列Oracle/PostgreSQL,支持高并发
TABLE表模拟序列数据库无序列但需跨库兼容
AUTO自动选择(依赖实现)视情况而定不确定快速开发/入门,但不适用于复杂系统

3、创建接口,基础父类JpaRepository,直接继承即可,Spring Data Jpa是一个全自动的框架,底层是Hibernate的框架,直接使用接口,不需要自己写sql

public interface PeopleDao extends JpaRepository<People,Integer> {
}

4、控制层Controller(基本的增删改查)

@RestController
@RequestMapping("/people")
public class PeopleController {@Autowiredprivate 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 "删除成功";}
}

相关文章:

  • window11系统 使用GO语言建立TDengine 连接
  • TDengine 运维——巡检工具(安装工具)
  • Oracle 临时表空间详解
  • Dynamics 365 Business Central AI Sales Order Agent Copilot
  • Deepseek应用技巧-Dify本地化搭建合同审批助手
  • 【面板数据】上市公司供应链网络地位数据(2001-2024年)
  • solidworks报错-只有合并特征才能被阵列。如果恰当,请选择实体的阵列
  • 解释k8s种ConfigMap和Secret的作用,如何在Pod中挂载环境变
  • 时间序列噪声模型分析软件推荐与使用经验
  • [9-1] USART串口协议 江协科技学习笔记(13个知识点)
  • 基于生产-消费模式,使用Channel进行文件传输(Tcp方式)
  • Rocky Linux上安装Go
  • 66常用控件_QTableWidget的使用
  • Win11安装Dify
  • APM32微控制器键盘PCB设计实战教程
  • Scratch节日 | 拯救屈原 | 端午节
  • WPF的布局核心:网格布局(Grid)
  • 数学概念解释数据集(200条)收集分享,为AI智能体应用助力~
  • MVCC 原理与并发控制实现
  • 长安链智能合约命令解析(全集)
  • 网站建设及优化 赣icp/做一个自己的网站
  • 新手做网站流程/搜索引擎优化培训免费咨询
  • 什么样的网站结构适合做seo/我的百度网盘登录入口
  • 做网站调用无广告视频/手机网页设计
  • 小型企业网站建设的背景/南宁正规的seo费用
  • 网络营销的主要形式有建设网站/东莞市网络seo推广价格