JPA使用步骤(二)

使用JPA持久化对象的步骤

        《1》创建persistence.xml,在这个文件中配置持久化单元(Hibernate中的hibernate.cfg.xml);

                  A、需要指定跟哪个数据库进行交互;

                  B、需要指定JPA使用哪个持久化框架(因为JPA本身没有持久化的能力);

        《2》创建EntityManagerFactory(Hibernate中的SessionFactoyr);

        《3》创建EntityManager 实体管理器(Hibernate中的Session);

        《4》创建实体类,使用annotation来描述实体类跟数据库表之间的一一映射关系;

        《5》使用JPA  API 完成增删改查操作。

        其主要创建执行过程如下:

        persistence.xml  --》  persistence  --》  EntityManagerFactory  --》  EntityManager  --》  Transaction  --》  find/merge/remove/persist  --》 em.getTransaction.commit()/em.close(); 

【persistence.xml】

        <persistence-unit  name="AdderssBookPU"  transaction-type="RESOURCE_LOCAL">  //  持久化单元名称

        <provider>oracle.toplink.essentials.PersisteneProvider</provider>  //  Provider名称

        <class>addressbook.Address</class>  //  需要持久化的类,可以有多个

        <class>addressbook.Person</class>

        <properties>

                <property  name="toplink.jdbc.user"  value="sa"/>

                <property  name="toplink.jdbc.password"  value="sa"/>

                <property  name="toplink.jdbc.url"  value="jdbc:microsoft:sqlserver//localhost:1433;DatabaseName=zf"/>  //  配置数据库连接

                <property  name="toplink.jdbc.driver"  value="jdbc:microsoft.jdbc.sqlserver.SQLServerDriver"/>  //  数据库驱动

                <property  name="toplink.ddl-generation"  value="drop-and-create-tables"/>  //  运行时先删除,再创建表

                 ......

一、persitence-unit : 持久化单元

        一个持久化单元可以创建一个EntityManagerFactory

               #   数据库相关的信息

               #  持久化提供者的信息

               #  厂商的一些客户化属性    <property  name="hibernate.show_sql"  value="true"/>

               #  其它一些可选的元数据

                           如果使用不用的持久化提供程序,那么需要指定提供程序类

                           附加的ORM映射文件

                           附加实体的JAR文件

二、Persistence  Provider  : 持久化提供者

              #  JPA只是一套标准的持久化API,它需要通过一个ORM框架,才能进行持久化,我们把这个能和JPA集成起来的ORM框架称为持久化的提供者;

              #  每一个支持EBJ3.0  JPA 的 ORM框架必须提供一个实现javax.persistence.spi.PersistenceProvider接口的实现类,通过它创建EntityManager对象

三、使用JPA的6个基本步骤

              1、创建EntityManagerFactory  --》  2、创建EntityManager  --》  3、开始一个事务getTransaction.begin()  --》  

              4、持久化操作merge / persist / remove / find  --》  5、提交事务getTransaction.commit()  --》  6、关闭EntityManager

四、EntityManagerFactory  :实体管理器工厂

              #  实体管理器的工厂,类似于Hibernate中的SessionFactory

              #  通过持久化提供者Persistence Provider创建这个对象应用程序管理

              #  用来创建EntityManager实例

              #  一个数据库创建一个EntityManagerFactory对象

五、EntityManager  :实体管理器

             #  实体管理器,类似于Hibernate的Session

             #  由EntityManagerFactory创建

             #  用来访问持久化上下文中实体对象的一个接口,管理实体对象与底层数据源之间进行O/R映射,包括增删改查

             #  一个线程一个EntityManager对象             

             其中,获取EntityManager对象的方式有一下两种:

                     《1》应用程序管理EntityManager

                                       应用程序通过javax.persistence.EntityManagerFactory的createEntityManager创建EntityManager实例;

                     《2》容器管理EntityManager

                                       通过依赖注入获取,如:@Stateless

                                                                                    public class HRAgentBean implements HRAgenRemote{

                                                                                            @PersistenceContext(unitName="salesemployee")

                                                                                             private EntityManager manager;

六、Persistence  Context  :持久化上下文

             #  其实就是JPA的一级缓存
             #  是一系列实体的管理环境,实体对象集合
             #  被EntityManager管理着的,通过EntityManager和持久化上下文进行交互
             #  持久化上下文类型:
                          1》应用程序管理:
                                       应用程序来管理所需资源
                                       持久化上下文是绑定到当前EntityManager
                          2》容器管理,又分为两种:
                                       A和事务范围相关持久化上下文
                                                    事务启动就会创建,事务结束也会结束;
                                                    在无状态session bean中使用;
                                       B扩展的持久化上下文
                                                    和有状态session bean结合使用,它的生命周期和事务无关;
                                                    当Session bean对象创建,持久化上下文就创建,当Session bean对象销毁,持久化上下文就结束。

【代码示例】

        public  class  JPAJUnitTest{

                private  static  EntityManagerFactory  emf;

                private  Person  p;

                private  Address  a;

                @BeforeClass

                public  static  void  setUpClass()  throws  Exception{

                        //  1、创建EntityManagerFactory

                        emf = Persistence.createEntityManagerFactory("AddressBookPU");

                }

                @Test

                public  void  createPersons()  throws  Exception{

                        add(p);

                }

                public  static  void  add(Object object){

                        //  2、创建EntityManager

                        javax.persistence.EntityManager  em = emf.createEntityManager();

                        //   3、开始事务

                        em.getTransaction().begin();

                        try{

                                //  4、持久化操作

                                em.persist(object);

                                //  5、提交事务

                                em.getTransaction().commit();

                        }catch(Exception  e){

                                e.printStackTrace();

                                em.getTransaction().rollback(); 

                        }finally{

                                //  6、关闭EntityManager

                                em.close();

                        }

                        ......

                }

        }












  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值