<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    paulwong

    小議JPA

    以前和數(shù)據(jù)庫打交道的標(biāo)準(zhǔn)INTERFACE是JDBC,放SQL語句,執(zhí)行,就可以有結(jié)果。隨著近年ORM的興起,以對(duì)象的方式存取數(shù)據(jù)庫大行其道。于是產(chǎn)生了JPA。

    也是一套INTERFACE,以O(shè)RM的方式提供,由廠商實(shí)現(xiàn),如ECLIPSE LINK,HIBERNATE,OPENEJB等。

    ENTITYMANAGERFACTORY:根據(jù)配置文件制造ENTITYMANAGER
    ENTITYMANAGER:以O(shè)RM的方式提供操作數(shù)據(jù)庫的功能
    TRANSACTION:事務(wù)保證
    PERSISTENCE.XML:鏈接數(shù)據(jù)庫信息,事務(wù)類型,重定義JPA的實(shí)現(xiàn)廠商等的配置信息

    在容器環(huán)境下使用:

    如果事務(wù)是RESOURCE_LOCAL的方式,則合用端需干所有的事情,如構(gòu)造ENTITYMANAGER,打開事務(wù),關(guān)閉事務(wù)等。類似于BMT。
    以下是在服務(wù)器環(huán)境中合用RESOURCE_LOCAL型的JPA

    事先要在容器中添加數(shù)據(jù)源。

     persistence.xml
    <?xml version="1.0" encoding="UTF-8" ?>
    <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">

      <!-- Tutorial "unit" -->
      <persistence-unit name="Tutorial" transaction-type="RESOURCE_LOCAL">
        <non-jta-data-source>myNonJtaDataSource</non-jta-data-source>
        <class>org.superbiz.jpa.Account</class>
      </persistence-unit>

    </persistence>


    import javax.persistence.EntityManagerFactory;
    import javax.persistence.EntityManager;
    import javax.persistence.EntityTransaction;
    import javax.persistence.PersistenceUnit;

    public class MyEjbOrServlet  {

        @PersistenceUnit(unitName="Tutorial")
        private EntityManagerFactory factory;

        // Proper exception handling left out for simplicity
        public void ejbMethodOrServletServiceMethod() throws Exception {
            EntityManager entityManager = factory.createEntityManager();

            EntityTransaction entityTransaction = entityManager.getTransaction();

            entityTransaction.begin();

            Account account = entityManager.find(Account.class, 12345);

            account.setBalance(5000);

            entityTransaction.commit();
        }

        
    }


    以下是JTA方式的JPA,容器+EJB+JPA+JTA,容器會(huì)在EJB的方法調(diào)用前打開一個(gè)事務(wù),在方法退出后,提交事務(wù),并且如果是多個(gè)數(shù)據(jù)源的,即有多個(gè)ENTITYMANAGER的
    可以保證一致性,即全局事務(wù)。相當(dāng)于之前的先調(diào)用USERTRANSACTION,BEGIN,COMMIT。

    事先要在容器中添加數(shù)據(jù)源。

     persistence.xml
    <?xml version="1.0" encoding="UTF-8" ?>
    <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">

      <!-- Tutorial "unit" -->
      <persistence-unit name="Tutorial" transaction-type="JTA">
        <jta-data-source>myJtaDataSource</jta-data-source>
        <non-jta-data-source>myNonJtaDataSource</non-jta-data-source>
        <class>org.superbiz.jpa.Account</class>
      </persistence-unit>

    </persistence>


    EJB
    import javax.ejb.Stateless;
    import javax.ejb.TransactionAttribute;
    import javax.ejb.TransactionAttributeType;
    import javax.persistence.EntityManager;
    import javax.persistence.PersistenceContext;

    @Stateless
    public class MyEjb implements MyEjbInterface {

        @PersistenceContext(unitName = "Tutorial")
        private EntityManager entityManager;

        // Proper exception handling left out for simplicity
        @TransactionAttribute(TransactionAttributeType.REQUIRED)
        public void ejbMethod() throws Exception {

        Account account = entityManager.find(Account.class, 12345);

        account.setBalance(5000);

        }
    }


    如果是J2SE環(huán)境下使用JPA,則又是不一樣的。


    persistence.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
        <persistence-unit name="SimplePU" transaction-type="RESOURCE_LOCAL">
            <provider>org.hibernate.ejb.HibernatePersistence</provider>
            <class>com.someone.jmail.valueobject.CallActivity</class>
            <class>com.someone.jmail.valueobject.Email</class>
            <properties>
                <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
                <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/test" />
                <property name="hibernate.connection.username" value="root" />
                <property name="hibernate.connection.password" value="12345" />
                <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
                <property name="hibernate.show_sql" value="false"/>
                <property name="hibernate.format_sql" value="true"/>
                <property name="hibernate.use_sql_comments" value="false"/>
                <property name="hibernate.hbm2ddl.auto" value="none"/>
            </properties>
        </persistence-unit>
        
    </persistence>


    Dao:

    public class UserDaoImpl implements UserDao { 
     public AccountInfo save(AccountInfo accountInfo) { 
     EntityManagerFactory emf = 
     Persistence.createEntityManagerFactory("SimplePU"); 
     EntityManager em = emf.createEntityManager(); 
     em.getTransaction().begin(); 
     em.persist(accountInfo); 
     em.getTransaction().commit(); 
     emf.close(); 
     return accountInfo; 
        } 
     } 


    posted on 2013-08-14 18:17 paulwong 閱讀(603) 評(píng)論(0)  編輯  收藏 所屬分類: J2EE

    主站蜘蛛池模板: 一个人看的免费高清视频日本| 国产精品无码免费视频二三区| 免费看一级高潮毛片| ASS亚洲熟妇毛茸茸PICS| 久久亚洲国产精品| 中文字幕不卡亚洲| 亚洲国产精品尤物yw在线| 成人AV免费网址在线观看| 久久免费精彩视频| 成人无码视频97免费| 日本黄页网址在线看免费不卡| 亚洲色大成网站www久久九| 亚洲中文无码av永久| 亚洲毛片免费视频| 亚洲精品天天影视综合网| 一级毛片视频免费| 亚洲av成人中文无码专区| 亚洲人成免费网站| 亚洲欧洲视频在线观看| 亚洲成人在线电影| 亚洲AV无码成人网站久久精品大 | 亚洲AV无码乱码在线观看性色扶 | 久久亚洲精品11p| 亚洲高清乱码午夜电影网| 中文日韩亚洲欧美制服| 亚洲中文字幕一二三四区苍井空| 亚洲国产精品专区| 亚洲二区在线视频| 亚洲jizzjizz在线播放久| 国产亚洲国产bv网站在线| 亚洲人成77777在线播放网站不卡 亚洲人成77777在线观看网 | 亚洲综合免费视频| 亚洲色成人网一二三区| 亚洲男女性高爱潮网站| 亚洲免费电影网站| 亚洲人成电影网站色| 偷自拍亚洲视频在线观看99| 阿v免费在线观看| 亚洲一级毛片在线观| 亚洲狠狠综合久久| 亚洲精品在线电影|