JPA学习笔记(一)

来源:互联网 发布:java源代码加密 编辑:程序博客网 时间:2024/06/09 21:20

1、什么是JPA
①:Java persistence api ,用于对象持久化的api。
②:是Java ee 5.0 平台标准的ORM规范,使得应用程序以统一的方式访问持久层。
③:应用程序通过jpa规范来访问持久层,持久层则为jpa的实现有hibernate、toplink等ORM框架,通过jpa的实现应用程序得以访问数据库。
④:因为jpa是EJB3.0规范的一部分,而EJB3.0又是Java EE5 的一部分,所以只有更新到Java EE5 才可以使用jpa。
⑤:jpa提供了以pojo编程模型为持久化对象的机制:通过JDK5.0注解或XML描述对象(关系表的映射关系),并将运行期的实体对象持久化到数据库中。
⑥:sun希望整合ORM技术,统一各种ORM框架的规范,实现了天下归一。
2、JPA和hibernate的关系
①:jpa是hibernate的一个抽象或者可以理解为接口。jpa本质上就是一种ORM规范,不是ORM框架。因为jpa并未提供ORM实现,只是制订了一些规范,提供了一些编程的api接口,具体实现有服务器厂商提供实现。
②:hibernate除了作为ORM框架之外,也是一种jpa实现。
③:jpa的目标之一是制定一个可以由更多供应商实现的api。
3、JPA优势
①标准化:提供相同的访问api,使得企业应用能够经过少量的修改就能够在不同的jpa框架下运行。
②对容器级特性的支持:jpa框架中支持大数据集、事务、并发等容器级事务。
③简单易用,集成方便:jpa的主要目标就是提供更加简单的编程模型,在jpa框架下创建实体和创建Java类一样简单,只需用javax.persistence.Entity进行注释;jpa框架和接口都比较简单。
④可媲美jdbc的查询能力:惧怕的查询语言是面向对象的,jpa定义了特有的JPQL,而且支持批量更新和修改、JOIN、GROUP BY、HAVING等通常只有SQL才能够提供的高级查询特性,还能支持子查询。
⑤支持面向对象的高级特性:jpa支持类之间的集成、多态等类之间的复杂关系,最大限度使用面向对象模型。
4、JPA使用步骤
1.创建persistence.xml,在这个文件中配置持久化单元(hibernate中的hibernate.cfg.xml),需要指定跟那个数据库进行交互;悬哦制定jpa使用那个持久化的框架。
2.创建EntityManagerFactory(hibernate中的SessionFactory)
3.创建EntityManager(实体管理器)(hibernate中的Session)
4.创建实体类,使用annotation来描述实体类跟数据库表之间的一一映射关系
5.使用JPA API 完成数据的增加、删除、修改和查询操作

①:持久化单元(persistence-unit):
数据库的相关信息
持久化提供者的信息(hibernate、toplink)
厂商的一些客户化属性
其它可选的一些元数据
如果使用不同的持久化提供程序,那么需要指定提供程序类
附加的ORM映射文件
附加的实体的JAR文件
一个持久化单元可以创建一个EntityManagerFactory
②:持久化提供者:persistence provider
jpa只是一套标准的持久化api,他需要通过一个ORM框架,才能进行持久化,我们把这个能和jpa集成起来的ORM框架称为持久化的提供者。
每一个jpa的ORM框架必须提供一个实现,javax.persistence.spi.PersistenceProvider接口的实现类,通过它创建EntityManager对象。
③:jpa使用步骤:
创建EntityManagerFactory–>创建EntityManager–>开始一个事务–>持久化操作merge/persist/remove/find–>提交事务–>关闭EntityManager
④:EntityManagerFactory:实体管理器的工厂,类似于hibernate中的SessionFactory,通过persistence provider 创建这个对象应用程序管理,用来创建EntityManager实例,一个数据库只能创建一个EntityManagerFactory。
⑤:EntityManager:实体管理器,类似于hibernate的session,由EntityManagerFactory创建,用来访问持久化上下文中实体对象的一个借口,管理实体对象与底层数据源之间进行O/R映射,包括CRUD,一个线程一个EntityManager对象。
获取EntityManager对象的方式:应用程序通过javax.persistence.EntityManagerFactory的createEntityManager创建EntityManager实例,也可通过依赖注入
@Stateless
public class HRAgentBean implents HRAgentRemote{
@PersistenceContext(unitName = “salesemployee”)
private EntityManager manger;
}
5、实体–基本注解
@Entity
将对象标注为一个实体,表示需要保存到数据库中。
默认情况下类名即为表名,通过name属性显示制定表名。
@Id
对应的属性是表的主键。
@GeneratedValue
主键的产生策略,通过strategy属性指定。
默认情况下,jpa自动选择一个最适合底层数据库的主键生成策略供选择:
IDENTITY:自增(oracle不支持)
AUTO:jpa自动选择合适的策略,是默认选项。
SEQUENCE:通过序列产生主键,通过@SequenceGenerator注解指定序列名。
TABLE:通过表产生主键,使用该策略可以使应用更易于数据库移植。
@Embeddedld或@IdClass
组合关键字。
@Column
属性对应的表字段。
6、实体–继承关系注解
对于继承的实体,javax.persistence.InheritanceType定义了三种映射策略。
SINGLE_TABLE:父子类都保存到同一个表中,通过字段值进行区分。
JOINED:父子类相同的都保存在同一个表中,不同的部分分开存放,通过表连接获取完整数据。
TABLE_PER_CLASS:每一个类对应自己的表(一般不推荐采用这种方式)。
7、实体–关联关系
@OneToOne
@OneToMany
@ManyToOne
@ManyToMany

0 0
原创粉丝点击