jpa的helloworld

1.JPA概述
JPA(Java Persistence API)作爲Java EE 5.0平臺標準的ORM規範,將得到所有Java EE服務器的支持。Sun這次吸取了之前EJB規範慘痛失敗的經歷,在充分吸收現有ORM框架的基礎上,得到了一個易於使用、伸縮性強的ORM規範。從目前的開發社區的反應上看,JPA受到了極大的支持和讚揚,JPA作爲ORM領域標準化整合者的目標應該不難實現。
JPA通過JDK 5.0註解或XML描述對象-關係表的映射關係,並將運行期的實體對象持久化到數據庫中。
Sun引入新的JPA ORM規範出於兩個原因:其一,簡化現有Java EE和Java SE應用的對象持久化的開發工作;其二,Sun希望整合對ORM技術,實現天下歸一。
JPA由EJB 3.0軟件專家組開發,作爲JSR-220實現的一部分。但它不囿於EJB 3.0,你可以在Web應用、甚至桌面應用中使用。JPA的宗旨是爲POJO提供持久化標準規範,由此可見,經過這幾年的實踐探索,能夠脫離容器獨立運行,方便開發和測試的理念已經深入人心了。目前Hibernate 3.2、TopLink 10.1.3以及OpenJpa都提供了JPA的實現。
JPA的總體思想和現有Hibernate、TopLink,JDO等ORM框架大體一致。總的來說,JPA包括以下3方面的技術:
ORM映射元數據,JPA支持XML和JDK 5.0註解兩種元數據的形式,元數據描述對象和表之間的映射關係,框架據此將實體對象持久化到數據庫表中;
JPA 的API,用來操作實體對象,執行CRUD操作,框架在後臺替我們完成所有的事情,開發者從繁瑣的JDBC和SQL代碼中解脫出來。
查詢語言,這是持久化操作中很重要的一個方面,通過面向對象而非面向數據庫的查詢語言查詢數據,避免程序的SQL語句緊密耦合。
2.Hibernate JPA

2.1開發JPA所依賴的jar包
Hibernate核心包
hibernate-distrbution-3.3.1.GA
--------------------------------------
hibernate3.jar
lib\bytecode\cglib\hibernate-cglib-repack-2.1_3.jar
lib\required\*.jar

Hibernate註解包(三個文件):hibernate-annotation-3.4.0.GA
--------------------------------------
hibernate-annotations.jar
lib\ejb3-persistence.jar.hibernate-commons-annotations.jar

Hiberante針對JPA的實現包(三個文件):hibernate-entitymanager-3.4.0.GA
-----------------------------------------------------------------
hibernate-entitymanager.jar
lib\test\log4j.slf4j-log4j12.jar

2.2JPA的配置文件
JPA規範要求在類路徑的META-INF目錄下放置persistence.xml,文件的名稱是固定的,配置模版
<?xml version="1.0"?>
<persistence 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_1_0.xsd" version="1.0">
<!-- file:///D:\hibernate\hibernate-entitymanager-3.3.2.CR1\resources\org\hibernate\ejb\persistence_1_0.xsd -->
<persistence-unit name="itcast" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
<property name="hibernate.connection.driver_class" value="org.gjt.mm.mysql.Driver"/>
<property name="hibernate.connection.username" value="root"/>
<property name="hibernate.connection.password" value="password"/>
<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/itcast?useUnicode=true&characterEncoding=UTF-8"/>
<property name="hibernate.max_fetch_depth" value="3"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="hibernate.jdbc.fetch_size" value="18"/>
<property name="hibernate.jdbc.batch_size" value="10"/>
<property name="hibernate.show_sql" value="false"/>
<property name="hibernate.format_sql" value="false"/>
</properties>
</persistence-unit>
</persistence>
transaction-type爲事務類型,一種是RESOURCE_LOCAL本地事務,處理本地數據庫的提交;第二種是JTA全局,用於多數據庫事務管理,由容器控制

表11-2 事務類型與EntityManager

運行環境

類型
J2EE環境
J2SE環境

EJB容器
Web容器

應用託管的EntityManager
JTA,RESOURCE_LOCAL
JTA,RESOURCE_LOCAL
RESOURCE_LOCAL

容器託管的EntityManager
JTA
不支持
不支持


從表11-2中可以看出,對於不同的EntityManager類型與所運行的環境,所支持的事務類型是不一樣的。

其中兩種情況下最爲簡單,一種是容器託管的EntityManager只能運行在EJB容器中,只能採用JTA的方式管理事務;另一種是J2SE環境下,只能使用應用託管的EntityManager並且只能採用RESOURCE_LOCAL的方式管理事務。本節的事務只針對這兩種情況講述,而對於應用託管的EntityManager在EJB容器和Web容器中由於都可以選擇不同的事務管理方式,情況比較複雜,所以將在第11.5節中詳細講述。
發佈了42 篇原創文章 · 獲贊 3 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章