Happiness is more than pleasure without pain

你只有非常努力,才能看起来毫不费力

导航

J2EE之JPA

POJO(plain old java object普通java类):具有setter/getter方法的Java类就称为POJO 

POJO转化为实体,手工使用标记,

@Entity

public class XXXX{...

JDBC方法由于它的简易性而具有吸引力,JTA方法提供了更多灵活性。你选择什么样的实现将依赖于你的应用程序的特定需求。


JTA:Java Transaction API,JTA允许应用程序执行分布式事务处理——在两个或多个网络计算机资源上访问并且更新数据。

Javax.transaction.UserTransaction接口使得应用程序能够编程控制事务边界。JTA(Java Transaction API) 为 J2EE 平台提供了分布式事务服务。

 应用程序调用begin()来起动事务,即可调用commit()也可以调用rollback()来结束事务。

(A卡取钱,转入B卡)

XML(Extensible Markup Language)扩展型可标记语言。面向短期的临时数据处理、面向万维网络

---------------------------------------------------------------------------------------------------------------------

事务:访问或更新数据库中各种数据项的一个程序执行单元(一系列不可分割的改动数据库的操作),具备ACID特性

持久化的过程:内存中对象被管理的过程,对象鱼数据库自动同步,由系统完成这个过程。

持久化上下文:由处于托管状态下的全部实体实例的集合构成(被JPA管理的内存空间)

实体管理器:是实体对象与数据库进行交互的桥梁,所有的数据库操作都需要通过实体管理器进行,提供管理对象的方法,当持久化上下文处于打开状态时,实体管理器将跟踪实体实例的状态,对实体实例所做的修改将会自动同步到数据库。

分2种:J2EE  分布式的            java SE   local的

持久化单元: 持久化单元通过persistence.xml文件定义实体管理器管理下的实体集合(他们都映射到同一个数据库中),该XML文件里的<persistence-unit>元素用于定义持久化单元,<persistence-unit>元素的name属性是持久化单元的名称 eg:first,    EntityManagerFactory,作为EntityManager的工厂,包含有当前O-R映射   的元数据信息,每个EntityManagerFactory,可称为一个持久化单元(PersistenceUnit),每个持久化单元可认为是一个数据源的映射(所谓 数据源,可理解为一个数据库,我们可以在应用服务器中配置多个数据源,同时使用不同的PersistenceUnit来映射这些数据源,从而能够很方便的实现跨越多个数据库之间的事务操作!)

//通过Persistence.createEntityManagerFactory(“持久化单元的名称”);方法就能获取实体管理器工厂实例,进而获得实体管理器实例。

EntityManagerFactory emf =Persistence.createEntityManagerFactory("first");

EntityManager em=emf.createEntityManager();

//然后调用getTransaction()方法获取实体事务对象,对实体的增删改查之前,都要用tx.begin()开启事务

EntityTransaction tx= em.getTransaction();

tx.begin();

em.persist(Student);//将Student持久化到数据库

tx.commit();

.

.

tx.begin();

/**对实体实例的任何改动操作

*..

*..

*....

*/

tx.commit();

//关闭实体管理器

em.close();

emf.close();


实体管理器API:


detached  游离

managed:实体管理器将实体持久化后,状态变为托管

persist(java.lang.Object  entity):创建托管实体,并将实体保存到数据库中,但并不是立即更改数据库。

find(entityclass,primaryKey)通过给定的实体类型和实体主键,在特定上下文中查找实体实例,找到则返回之。

merge(entity)不能直接将实体状态由游离变为托管,而是重新生成一个托管状态的实体实例,内存->数据库

refresh(entity)从数据库中读取实体状态,即刷新。

remove(entity)从数据库中删除实体实例         序列化:将对象的每个属性保存到数据库)


@Resource可以理解为资源->数据源->也就是数据连接,基本上就是告诉程序数据库在哪里

@PersistenceContext
则是注入一坨保存实体类状态的数据结构,针对实体类的不同状态(四种,managedh或detached等)可以做出不同的反应(merge,persist等等),其实就是把数据从数据库里提出,然后在内存里处理的,再返回数据库的法则。

posted on 2014-10-28 19:49  believer  阅读(276)  评论(0编辑  收藏  举报