Java Persistence API
JPA通过JDK5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
对象关系映射:数据库字段名与pojo实体类属性名、数据库表名与pojo实体类的类名、数据库字段类型和实体类字段类型。
JPA包括以下3方面的技术
ORM映射元数据
API,用来操作实体对象,执行CRUD操作,框架在后台替我们完成所有的事情
查询语言,通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语
句紧密耦合。
JPA 规范
JPA(JavaPersistenceAPI)是官方提出的Java持久化规范,在一定程度上也是ORM持久化的规范
JPA需要Provider来实现其功能
供应商
Hibernate
Hibernate就是JPA Provider中最强的一个
Spring
在Spring 2.0.1中,正式提供对JPA的支持,这也促成了JPA的发
其他如OpenJPA、EclipseLink(TopLink)等
Hibernate
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,pojo实体类,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
从Hibernate3.2开始,Hibernate提供了对JPA的支持
目前Hibernate最新版本为5.3.0
当创建一个JPA项目是会自动生成JPA Content下persistence.xml文件
里面属性:
persistence-unit: 持久化单元
name: 持久化单元名称
transaction-type: 事务类型
de.vogella.jpa.simple.model.Todo
POJO注册,可以有多个(即有多少POJO实体类就可以注册多少个Class)
映射pojo实体类
@Entity
将POJO标注为持久化类,修饰类
@Table(name = “todo”)
映射表,修饰类,指定数据库表名。当表名和数据库名相同时可省略
@Id
指定映射表的主键,修饰属性或方法
@Column
映射表的字段,修饰属性或方法。当数据属性与数据库字段不一致时需指定映射的数据库字段
@SequenceGenerator
序列生成器,与@GeneratedValue配合使用
@SequenceGenerator(sequenceName = “seq”, allocationSize = 1, initialValue = 1, name = “SEQ”)
sequenceName 数据库序列名
allocationSize 增量,默认为50,必须与数据库一致
initialValue 初始值,默认为0,必须与数据库一致
name 生成器名称,@GeneratedValue的generator属性必须是这个值
@GeneratedValue
指定自动增长列的类型
@GeneratedValue(generator = “SEQ”, strategy = GenerationType.SEQUENCE)
generator 生成器的名称
strategy 生成器的类型
MySql: GenerationType.IDENTITY
Oracle: GenerationType.SEQUENCE
Hibernate JPA API
EntityManagerFactory
实体管理器工厂
EntityManager
实体管理器,负责CURD和事务管理
EntityTransaction
事务管理接口
本图是用Junit测试
EntityManager常用方法
新增
public void persist(Object entity);
更新
public T merge(T entity);
删除
public void remove(Object entity);
根据id查询
public T find(Class entityClass, Object primaryKey);
核心 hibernate-core jar
maven 中添加pom.xml,下载地址
https://mvnrepository.com/