ORM和JPA简介
持久化
即数据在瞬时状态(内存)和持久状态(数据库–磁盘)之间的转化。
ORM框架
ORM即Object Relational Mapping对象关系映射。完成表与类,属性与类,表之间关系外键与对象间关系之间的映射,解决了以下问题:
- 对象之间管理的方向性与外键的无方向性的矛盾
- 对象的尽可能细粒度与关联数据往往整合在同一个表的矛盾
- 继承和多态的层次性和外键的无层次性的矛盾
- 数据获取方式彼此不适用
为解决问题,ORM框架应当具备如下功能:
- 对象模型和关系模型之间的元数据映射
- 用来在对象上执行相关操作的CRUD API
- 一种对象查询语言
- 不同数据获取策略和对象网络遍历功能,以便提高内存使用率以及数据获取时间性能
JPA
即Java Persistence API,在Java中处理持久化操作,对JavaEE中的ORM特性和功能执行标准化
将对象模型映射到关系模型
定义实体
实体类——和数据表相对应的类(通常一对一,也可一对多)。采用@Entity注解标识,并用@Table注解表明与其对应的表名。其中的主键用@Id注解标明,如果使用了@GeneratedId标注,说明该值是由ID生成策略生成的。
将属性映射到列
默认情况下实体类中所有属性都会被持久化,除非用@Transient标注。默认列名与属性名相同,如果不同可以用@Column注解进行更改。
在对象之间创建关联
- 一对一关联:@OneToOne注解标注,@JoinColumn指定了外键关系
- 多对一关联:@ManyToOne标注
- 一对多关联:@OneToMany标注,标注的属性为Set、List一类
- 多对多关联:@ManyToMany标注,用@JoinTable指定两个表之间的关联表的各列
单向关联
在关联注解中使用mappedBy属性指定另一方为只读(镜子)属性,镜子属性值的设置对创建和删除关联没有影响。
配置JPA和Hibernate
这一章所需要的所有依赖如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lonelyquantum.springbeginning.wileybookch4</groupId>
<artifactId>JDBCTest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>JDBCTest</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>4.3.10.RELEASE</spring.version>
<junit.version>4.12</junit.version>
<h2.version>1.4.196</h2.version>
<hibernate.version>5.2.10.Final</hibernate.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</