JPA(Java Persistence API)是一系列类、方法,用于将大量数据储持久地存到数据库中。
企业级应用中,通过存储和检索大量数据来执行数据库操作。使用JPA,会使与数据库交互的负担大大减少。它在对象模型(Java Objects)和关系模型(数据库程序)之间架起一座桥梁。
关系对象以表格的形式表示,而对象模型是以对象格式的相互关系来表示的。在从关系模型中存储和检索一个对象模型时,往往会由于以下的原因发生不匹配:
单元 | 描述 |
---|---|
EntityManagerFactory | EntityManager的工厂类,创建并管理多个EntityManager实例 |
EntityManager | 接口类,管理对象的持久化操作,类似于Query实例的工厂类 |
Entity | 持久性对象,作为记录储存在数据库中 |
EntityTransaction | 与EntityManager为1对1关系,对于每一个EntityManager来说,其操作都由EntityTransaction维护 |
Persistence | 这个类包含了获取EntityManagerFactory实例的静态方法 |
Query | 这个接口由每个JPA供应商实现,以获得符合标准的关系对象 |
ORM(Object Relational Mapping)是一种将数据从对象类型转换为关系类型的编程能力,反之亦然。
第一阶段 对象数据 包含POJO类,服务接口和类。这是主要的业务组件层,主要处理业务逻辑操作与属性。
例如,一个雇员数据库模式:
第二个阶段为 映射 或 持久层 阶段,包含JPA提供者、映射文件(ORM.xml)、JPA加载器和对象网格。
第三个阶段为关系数据阶段。它包含与业务组件有逻辑联系的关系型数据。如上所述,只有业务组件提交了数据之后,才会在主数据库上物理性存储。在那之前,修改的数据会被储存在类似网格格式的高速缓存中。获取数据的情况也类似。
上述三个阶段的程序性互动机制被称为对象关系映射。
mapping.xml 文件用于指示供应商将实体类与数据库表进行映射。
以下例子将一个Employee POJO类与数据库表建立映射:
public class Employee {
private int eid;
private String ename;
private double salary;
private String deg;
public Employee(int eid, String ename, double salary, String deg) {
super( );
this.eid = eid;
this.ename = ename;
this.salary = salary;
this.deg = deg;
}
public Employee( ) {
super();
}
public int getEid( ) {
return eid;
}
public void setEid(int eid) {
this.eid = eid;
}
public String getEname( ) {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public double getSalary( ) {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public String getDeg( ) {
return deg;
}
public void setDeg(String deg) {
this.deg = deg;
}
}
<? xml version="1.0" encoding="UTF-8" ?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm
http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"
version="1.0">
<description> XML Mapping file</description>
<entity class="Employee">
<table name="EMPLOYEETABLE"/>
<attributes>
<id name="eid">
<generated-value strategy="TABLE"/>
</id>
<basic name="ename">
<column name="EMP_NAME" length="100"/>
</basic>
<basic name="salary">
</basic>
<basic name="deg">
</basic>
</attributes>
</entity>
</entity-mappings>
: 允许在xml文件中使用entity标签
: 应用的描述
: 定义想要转化为数据库中表的entity类。属性类定义了POJO entity的类名
: 定义表中的字段
: 定义了主Key, 定义了如何分配主键值,如自动、手动或取自序列
: 定义余下的表属性
: 定义用户规定的表字段名
Java类,将实例值和各种行为封装到名为对象的单一单元。Java Bean是一个临时存储可重用的组件/对象。它是一个可序列化的类,有默认的构造函数和getter/setter方法用以单独初始化实例的属性。