Spring Data JPA

109 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第17天,点击查看活动详情

一、什么是JPA?

JPA(Java Persistence API),中文名Java持久层API,是Java持久化规范,它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据。

JPA的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束现在Hibernate,TopLink,JDO等ORM框架各自为营的局面。

1-1、那JPA和JDBC有什么异同呢

相同处:
1.都跟数据∙库操作有关,JPA 是JDBC 的升华,升级版。
2.JDBC和JPA都是一组规范接口
3.都是由SUN官方推出的\

不同处:
1.JDBC是由各个关系型数据库实现的, JPA 是由ORM框架实现
2.JDBC 使用SQL语句和数据库通信。 JPA用面向对象方式, 通过ORM框架来生成SQL,进行操作。
3.JPA在JDBC之上的, JPA也要依赖JDBC才能操作数据库。\

image.png

JDBC是我们最熟悉的用来操作数据库的技术,但是随之而来带来了一些问题:

  1. 需要面向SQL语句来操作数据库,开发人员学习成本更高。
  2. 数据库的移至性不高,不同数据库的SQL语句无法通用。
  3. java对象和数据库类型的映射是个麻烦事。

1-2、但在Sun在JDK1.5提出了JPA:

JPA全称Java Persistence API(2019年重新命名为 Jakarta Persistence API ),是Sun官方提出的一种ORM规范。 O:Object R: Relational M:mapping

作用 1.简化持久化操作的开发工作:让开发者从繁琐的 JDBC 和 SQL 代码中解脱出来,直接面向对象持久化操作。 2.Sun希望持久化技术能够统一,实现天下归一:如果你是基于JPA进行持久化你可以随意切换数据库。

1-2-1、该规范为我们提供的帮助

1)ORM映射元数据:JPA支持XML和注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中;
如:@Entity 、 @Table 、@Id 与 @Column等注解。

2)JPA 的API:用来操作实体对象,执行CRUD操作,框架在后台替我们完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。
如:entityManager.merge(T t);

3)JPQL查询语言:通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。
如:from Student s where s.name = ?

So: JPA仅仅是一种规范,也就是说JPA仅仅定义了一些接口,而接口是需要实现才能工作的。

二、Hibernate与JPA

所以底层需要某种实现,而Hibernate就是实现了JPA接口的ORM框架。 也就是说: JPA是一套ORM规范,Hibernate实现了JPA规范!

image.png

Mybatis和hibernate对比
mybatis:小巧、方便、高效、简单、直接、半自动
半自动的ORM框架,
小巧: mybatis就是jdbc封装
在国内更流行。
场景: 在业务比较复杂系统进行使用,

hibernate:强大、方便、高效、(简单)复杂、绕弯子、全自动
全自动的ORM框架,
强大:根据ORM映射生成不同SQL
在国外更流。
场景: 在业务相对简单的系统进行使用,随着微服务的流行。

三、jpa的对象4种状态

临时状态:刚创建出来,∙没有与entityManager发生关系,没有被持久化,不处于entityManager中的对象
持久状态:∙与entityManager发生关系,已经被持久化,您可以把持久化状态当做实实在在的数据库记录。
删除状态:执行remove方法,事物提交之前
游离状态:游离状态就是提交到数据库后,事务commit后实体的状态,因为事务已经提交了,此时实体的属性任你如何改变,也不会同步到数据库,因为游离是没人管的孩子,不在持久化上下文中。