什么是Java ORM?
虽然它们的执行不同,但每个JPA实现都提供某种ORM层。为了理解JPA和JPA兼容的工具,我们要知道ORM。
作为应用程序体系结构的一部分,ORM层负责管理软件对象的转换,以便与关系数据库中的表和列进行交互。在Java中,ORM层转换Java类和对象,以便可以在关系数据库中进行存储和管理。
默认情况下,持久化对象的名称将成为表的名称,字段将成为列。设置表后,每个表行对应于应用程序中的对象。一般来说对象映射是可配置的,不过默认值往往效果很好。
Java中的数据持久性
从编程的角度来看,ORM层是一个适配器层:它使面向对象的开发语言适应SQL和关系表的语言。 ORM层允许面向对象的开发人员构建持久保存数据的软件,而无需离开面向对象这个概念。
使用JPA时,可以创建从数据存储区到应用程序的数据模型对象的映射。您可以定义对象和数据库之间的映射,而不是定义对象的保存和检索方式,然后调用JPA来保存它们。如果您正在使用关系数据库,那么应用程序代码和数据库之间的大部分实际连接将由JDBC处理。
作为规范,JPA提供元数据注解,您可以使用它来定义对象和数据库之间的映射。每个JPA实现都为JPA注解提供了自己的引擎。 JPA规范还提供了PersistanceManager或EntityManager,它们是与JPA系统联系的关键点(其中我们的业务逻辑代码告诉系统如何处理映射对象)。
为了看得更仔细,我们看看下面的代码,这是一个用于为音乐家建模的简单数据类。
public class Musician {
private Long id;
private String name;
private Instrument mainInstrument;
private ArrayList performances = new ArrayList();
public Musician( Long id, String name){ /* constructor setters… */ }
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
public void setMainInstrument(Instrument instr){
this.instrument = instr;
}
public Instrument getMainInstrument(){
return this.instrument;
}
// …Other getters and setters…
}
代码中的Musician类用于保存数据。 它可以包含原始数据,例如名称字段。 它还可以与其他类(如mainInstrument和performance)保持关系。
Musician 这种类有时称为DTO或数据传输对象。 DTO是软件开发的常见功能。 虽然它们包含多种数据,但它们不包含任何业务逻辑。 持久化数据对象是软件开发中普遍存在的挑战。
JDBC的数据持久性
将Musician类的实例保存到关系数据库的一种方法是使用JDBC库。 JDBC是一个抽象层,它允许应用程序发出SQL命令而无需考虑底层数据库实现。
下面的代码显示了如何使用JDBC持久化Musician类。
Musician georgeHarrison = new Musician(0, “George Harrison”);
String myDriver = “org.gjt.mm.mysql.Driver”;
String myUrl = “jdbc:mysql://localhost/test”;
Class.forName(myDriver);
Connection conn = DriverManager.getConnection(myUrl, “root”, “”);
String query = " insert into users (id, name) values (?, ?)";
PreparedStatement preparedStmt = conn.prepareStatement(query);
preparedStmt.setInt (1, 0);
preparedStmt.setString (2, “George Harrison”);
preparedStmt.setString (2, “Rubble”);
preparedStmt.execute();
conn.close();
// Error handling removed for brevity
georgeHarrison对象可以来自任何地方(前端提交,外部服务等),并设置其ID和名称字段。 然后,对象上的字段用于提供SQL插入语句的值。 (PreparedStatement类是JDBC的一部分,提供了一种将值安全地应用于SQL查询的方法。)
虽然JDBC允许手动配置附带的控件,但与JPA相比,它很麻烦。 要修改数据库,首先需要创建一个SQL查询,该查询从Java对象映射到关系数据库中的表。 然后,只要对象签名发生更改,就必须修改SQL。 使用JDBC,维护SQL本身就成了一项任务。
JPA的数据持久性
现在看看下面的代码,我们使用JPA持久保存Musician类。
Musician georgeHarrison = new Musician(0, “George Harrison”);
musicianManager.save(georgeHarrison)
我们用一行session.save()替换了JDBC中的手动SQL,它指示JPA持久保存该对象。 从那时起,SQL转换由框架处理,因此我们永远不必离开面向对象。
JPA中的元数据注释
上面的代码中的魔力来自配置,该配置是使用JPA的注解创建的。 我们使用注解来告知JPA应该保留哪些对象,以及如何保留它们。
下面的代码显示了带有单个JPA注解的Musician类。
@Entity
public class Musician {
// …class body
}
持久对象有时称为实体。 将@Entity附加到类似Musician的类可以告知JPA该类及其对象应该被保留。JPA还支持使用外部XML文件而不是注释来定义类元数据。
配置JPA
与大多数现代框架一样,JPA遵循约定编码(也称为约定优于配置),其中框架提供基于行业最佳实践的默认配置。 作为一个示例,名为Musician的类将默认映射到名为Musician的数据库表。
传统配置是节省时间的,并且在许多情况下它运行良好。 当然也可以自定义JPA配置。 例如,我们可以使用JPA的@Table注释来指定应存储音乐家类的表。
@Entity
@Table(name=“musician”)
public class Musician {
// …class body
}
上面的代码告诉JPA将实体(音乐家类)持久保存到音乐家表中。
主键
在JPA中,主键是用于唯一标识数据库中每个对象的字段。 主键可用于引用对象并将对象与其他实体相关联。 每当我们在表中存储对象时,我们还将指定要用作其主键的字段。
在下面的代码中,我们告诉JPA哪个字段用作Musician的主键。
@Entity
public class Musician {
@Id
private Long id;
在这种情况下,我们使用JPA的@Id注释将id字段指定为Musician的主键。 默认情况下,此配置假定主键将由数据库设置 - 例如,当字段设置为在表上自动递增时。
JPA支持生成对象主键的其他策略。 它还有用于更改单个字段名称的注释。 通常,JPA足够灵活,可以适应我们可能需要的任何持久性映射。
CRUD操作
将类映射到数据库表并建立其主键后,即可拥有在数据库中创建,检索,删除和更新该类所需的一切。 调用session.save()将创建或更新指定的类,具体取决于主键字段是否为null或是否适用于现有实体。 调用entityManager.remove()将删除指定的类。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
总结
面试前的“练手”还是很重要的,所以开始面试之前一定要准备好啊,不然也是耽搁面试官和自己的时间。
我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。
面试题及解析总结
大厂面试场景
知识点总结
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
知识点总结
[外链图片转存中…(img-XtqzCGB1-1713465135075)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!