hibernate適用情況
在最近的項(xiàng)目開發(fā)過程中,需要實(shí)現(xiàn)數(shù)據(jù)的持久化工作,原本打算在應(yīng)用程序和數(shù)據(jù)庫中中間增加一層數(shù)據(jù)持久層,使用Hibernate技術(shù)實(shí)現(xiàn)該功能。經(jīng)過測(cè)試發(fā)現(xiàn)hibernate操作數(shù)據(jù)庫的速度較慢,因此放棄的hibernate的使用。
究竟是什么原因呢?分析hibernate源碼,未發(fā)現(xiàn)hibernate采用多線程異步操作數(shù)據(jù)庫,雖然它也支持緩存管理(hibernate有兩級(jí)緩存結(jié)構(gòu)),但在數(shù)據(jù)庫更新頻繁的環(huán)境下,有無緩存差別不大。當(dāng)然,如果程序要頻繁更新數(shù)據(jù)庫并且對(duì)性能要求比較高的話,采用hibernate不是一個(gè)十分妥當(dāng)?shù)慕鉀Q方案。如果對(duì)數(shù)據(jù)庫的操作大多數(shù)是查詢的話,采用hibernate應(yīng)該相當(dāng)不錯(cuò),在開啟hibernate緩存的情況下,應(yīng)該對(duì)性能不會(huì)造成太大的影響。
hibernate使用中關(guān)鍵的類
Configuration
Configuration 類負(fù)責(zé)讀取 Hibernate.cfg.xml 文件,管理Hibernate 的配置信息。Hibernate 運(yùn)行時(shí)需要獲取一些底層實(shí)現(xiàn)的基本信息,其中幾個(gè)關(guān)鍵屬性包括:
數(shù)據(jù)庫URL
數(shù)據(jù)庫用戶
數(shù)據(jù)庫用戶密碼
數(shù)據(jù)庫JDBC驅(qū)動(dòng)類
數(shù)據(jù)庫dialect,用于對(duì)特定數(shù)據(jù)庫提供支持,其中包含了針對(duì)特定數(shù)據(jù)庫特性的實(shí)現(xiàn),如Hibernate數(shù)據(jù)類型到特定數(shù)據(jù)庫數(shù)據(jù)類型的映射等。
SessionFactory
SessionFactory負(fù)責(zé)創(chuàng)建Session實(shí)例??梢酝ㄟ^Configuation 實(shí)例構(gòu)建SessionFactory。
Session
Session是持久層操作的基礎(chǔ),相當(dāng)于JDBC中的Connection。Session實(shí)例通過SessionFactory實(shí)例構(gòu)建。
Query
用來執(zhí)行查詢操作。通常由Session類來構(gòu)建。
Transaction
每次對(duì)數(shù)據(jù)庫的操作都可以看作是一次事務(wù)。
事務(wù)通常由session使用session.beginTransaction()方法構(gòu)建。事務(wù)結(jié)束要使用commit()方法提交,如果出錯(cuò)可以使用rollback()方法回滾。
使用步驟
1.創(chuàng)建數(shù)據(jù)庫
創(chuàng)建javabean
創(chuàng)建配置文件Hibernate.cfg.xml和類名.hbm.xml
2.根據(jù)hibernate配置文件完成初始化,并獲得一個(gè)Configuration類的實(shí)例。
Configuration config = new Configuration().configure();
3.然后根據(jù)該實(shí)例構(gòu)建一個(gè)SessionFactory的實(shí)例.
SessionFactory sessionFactory = config.buildSessionFactory();
4.根據(jù) SessionFactory的實(shí)例構(gòu)建一個(gè)Session的實(shí)例
Session session = sessionFactory.openSession();
5.調(diào)用Session所提供的save、find、load 、flush等方法完成持久層操作;
也可以通過session.createQuery方法創(chuàng)建Query一個(gè)實(shí)例來執(zhí)行查找操作。
配置Hibernate.cfg.xml一個(gè)典型的配置文件(Hibernate.cfg.xml),下面配置文件中的注釋應(yīng)該已經(jīng)比較清楚:<?xml version="1.0" encoding="UTF-8" ?><hibernate-configuration> <!-- SessionFactory 配置 --> <session-factory> <!-- 數(shù)據(jù)庫URL --> <property name="hibernate.connection.url"> jdbc:oracle:thin:@10.172.10.39:1521:ora92 </property> <!-- 數(shù)據(jù)庫JDBC驅(qū)動(dòng) --> <property name="hibernate.connection.driver_class"> oracle.jdbc.driver.OracleDriver </property> <!-- 數(shù)據(jù)庫用戶名 --> <property name="hibernate.connection.username">icor</property> <!-- 數(shù)據(jù)庫用戶密碼 --> <property name="hibernate.connection.password">icor01</property> <!--dialect ,每個(gè)數(shù)據(jù)庫都有其對(duì)應(yīng)的Dialet以匹配其平臺(tái)特性 --> <property name="dialect"> net.sf.hibernate.dialect.OracleDialect </property> <!-- 是否將運(yùn)行期生成的SQL輸出到日志以供調(diào)試 --> <property name="hibernate.show_sql">True</property> <!-- 事務(wù)管理類型,這里我們使用JDBC Transaction --> <property name="hibernate.transaction.factory_class"> net.sf.hibernate.transaction.JDBCTransactionFactory </property> <!--映射文件配置,使用相對(duì)路徑 --> <mapping resource="conf/UserInfo.hbm.xml" /> <mapping resource="conf/IcorInfo.hbm.xml" /> </session-factory></hibernate-configuration>
先寫到這,后續(xù)跟新。。。
聯(lián)系客服