程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> Spring注入JPA+JPA事務管理,spring注入jpa事務

Spring注入JPA+JPA事務管理,spring注入jpa事務

編輯:JAVA綜合教程

Spring注入JPA+JPA事務管理,spring注入jpa事務


 

  本例實現的是Spring注入JPA 和 使用JPA事務管理。JPA是sun公司開發的一項新的規范標准。在本質上來說,JPA可以看作是Hibernate的一個子集;然而從功能上來說,Hibernate是JPA的一種實現。

  在web開發的過程中,使用hibernate進行數據庫連接、事務等的管理。當然也可以使用JPA替換Hibernate是實現這些功能。

 

  一、使用Spring來注入JPA

    之前,在本人博客(http://www.cnblogs.com/demoMeng/)中已經進行了hibernate的搭建和後期的是實現。了解到了,獲取hibernate中的sessionFactory有兩種方式。

    一種是自己手動獲取src目錄下hibernate.cfg.xml配置文件:(在dao層面的代碼)

        SessionFactory sessionFactory = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory();

 

    另外一種是使用spring注入,並且可以刪除src目錄下的配置文件:

      在spring的配置文件applicationContext.xml文件中進行sessionFactory和dataSource的bean的配置:之後在dao層面的實現類中定義一個屬性為SessionFactory,使用spring注入

 

            

          同理,使用JPA也有這兩中方式來是實現。先前,本人博客中已進行了JPA第一種的實現(手動書寫代碼讀取JPA配置文件):http://www.cnblogs.com/demoMeng/p/5853583.html,所以在此,進行第二種使用spring注入的方式是實現獲取EntityManagerFactory。

 

 

      1、首先:在spring配置文件創建一個bean標簽,目的創建一個EntityManagerFactory,這裡不同於sessionFactory的bean,因為這裡讀取的是src目錄下的META-INF目錄下的persistence.xml 即JPA的配置文件,所以在下面設置的是持久化單元名"myJpa",對應JPA配置文件中的單元名字。

      <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">  
                <property name="persistenceUnitName" value="myJpa"/>  
          </bean>  

 

      JPA的配置文件 :persistence.xml,這裡的具體不做過多的解釋,如果有疑問,請上網查找資料。

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">

    <persistence-unit name="myJpa" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <class>entity.Product</class>

<properties> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/> <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/> <property name="hibernate.connection.username" value="root"/> <property name="hibernate.connection.password" value="123456"/> <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/ProductDB"/> <property name="hibernate.show_sql" value="true"></property> <property name="hibernate.format_sql" value="true"></property> <property name="hibernate.connection.autocommit" value="false"/> <property name="hibernate.hbm2ddl.auto" value="update"/> </properties> </persistence-unit> </persistence>

 

        

       2、最後:在dao層面設置sessionFactory成員屬性。

                           

                      在這裡,可以使用spring的注解,或者是使用bean注入的方式,這裡使用的spring的注入進行注入。使用spring注解需要在spring配置文件中添加一個注解的解析器:,這個@Qualifier("entityManagerFactory")注解中的entityManagerFactory對應的是spring配置文件中JPA配置的entityManagerFactory的id屬性值。

 

 

      二、添加JPA的事務管理

         1、首先建立在之前使用spring注入JPA的基礎之上,再加入JPA的事務管理。好處 不需要手動開啟、提交事務和關閉資源,因為這些都是重復的代碼,做的事情都是同一樣的。所以可以交給事務來管理。

          首先:在spring配置文件applicationContext.xml中添加事務管理,如下 

            <bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager">  
                     <property name="entityManagerFactory" ref="entityManagerFactory"/>  
            </bean>  

            <tx:annotation-driven transaction-manager="txManager"/> 

 

          其次:在dao層面加上注解@Transactional。這個注解需要加載類上。並且在這個dao類上加上一個屬性:之後就可以直接使用這個entityManager進行CURD操作。

          這個屬性: 的定義是建立在JPA的事務管理之上的,當web容器讀取spring配置文件中的entityManagerFactory後會自動創建一個entityManager,然後根據在dao類中定義的這個屬性進行注入,和上面的定義EntityManagerFactory不同。具體的可以自己進行嘗試。  

 

  

 


 

      謝謝浏覽! 

        

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved