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

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 "删除成功";}
}
http://www.lryc.cn/news/2393904.html

相关文章:

  • Vue 3.0 中的路由导航守卫详解
  • 【Sqoop基础】Sqoop生态集成:与HDFS、Hive、HBase等组件的协同关系深度解析
  • MySQL + CloudCanal + Iceberg + StarRocks 构建全栈数据服务
  • MSVC支持但是Clang会报错的C++行为
  • 截屏精灵:轻松截屏,高效编辑
  • 【JavaWeb】基本概念、web服务器、Tomcat、HTTP协议
  • 黑马程序员C++核心编程笔记--4 类和对象--封装
  • Debian:自由操作系统的精神图腾与技术基石
  • 云计算Linux Rocky day02(安装Linux系统、设备表示方式、Linux基本操作)
  • 在 ODROID-H3+ 上安装 Win11 系统
  • Docker常用命令操作指南(一)
  • 什么是 SQL 注入?如何防范?
  • 使用el-input数字校验,输入汉字之后校验取消不掉
  • Docker容器启动失败的常见原因分析
  • Java提取markdown中的表格
  • 立志成为一名优秀测试开发工程师(第七天)——unittest框架的学习
  • 精益数据分析(85/126):营收阶段的核心指标与盈利模型优化——从数据到商业决策的落地
  • 论坛系统(4)
  • 本地Markdown开源知识库选型指南
  • 【.net core】SkiaSharp 如何在Linux上实现
  • 后端项目中静态文案国际化语言包构建选型
  • 前端面经 React常见的生命周期
  • 力扣面试150题--二叉树的层平均值
  • 【Doris入门】Doris初识:分布式分析型数据库的核心价值与架构解析
  • C#面试问题41-60
  • 数据结构与算法学习笔记(Acwing 提高课)----动态规划·区间DP
  • 【合集】Linux——31个普通信号
  • 从0到1搭建AI绘画模型:Stable Diffusion微调全流程避坑指南
  • ASP.NET Core 中JWT的基本使用
  • 未来技术展望