問(wèn)題一: hibernate是什么?
 hibernate一種ORM工具,是連接 java 應(yīng)用程序和關(guān)系數(shù)據(jù)庫(kù)的中間件,這是對(duì)JDBC的封裝,主要負(fù)責(zé) java 對(duì)象的持久化.

問(wèn)題二:hibernate中所需要的各 jar 分別起什么作用?
 
hibernate3.jar  編譯hibernate所必須的jar 文件

第三方 jar文件(即hibernate自身所使用的其它jar文件,有以下介紹的jar文件,目前階級(jí)對(duì)于我們開(kāi)發(fā)一個(gè)使用hibernate技術(shù)底層實(shí)現(xiàn)的項(xiàng)目已經(jīng)夠用了)

antlr-2.7.6rc1.jar  :
 ANTLR (ANother Tool for Language Recognition)
是一個(gè)PCCTS制定的語(yǔ)言工具,它為他創(chuàng)建認(rèn)定者,程序編譯者,翻譯者提供
一個(gè)包括 java,c#和C++在內(nèi)的語(yǔ)法描述框架,使用from 多態(tài)查詢(xún)語(yǔ)句時(shí)需要它。

cglib-2.1.3.jar:
 CGL (Code Generation Libray) 是一種高性能,高質(zhì)量
的代碼產(chǎn)生庫(kù), hibernate 用它來(lái)實(shí)現(xiàn) po (persistent object)字節(jié)碼的動(dòng)態(tài)生成

asm.jar和asm-attrs.jar:  ObjectWeb的字節(jié)碼操縱框架,用來(lái)動(dòng)態(tài)生成java代碼。

commons-collections-2.1.1.jar : Apache Commons 包中的一個(gè),包含了一些Apache
開(kāi)發(fā)的集合類(lèi),功能比java.util.*;強(qiáng)大

commons-logging-1.0.4.jar:   Jakarta的通用日志記錄包

dom4j-1.6.1.jar: 是一個(gè)JAVA的XML API  類(lèi)似于jdom,用來(lái)讀寫(xiě)XML文件,dom4j是一個(gè)非常
優(yōu)秀的JAVA XML API, 具有性能優(yōu)異,功能強(qiáng)大和易使用的特點(diǎn),同時(shí)它也是一個(gè)開(kāi)放源代碼
的軟件,可以在 SourceForge上找到它。

eheache-1.1.jar:  EHCahe是一個(gè)純JAVA的進(jìn)程中的緩存,它具有經(jīng)下特性,快速、簡(jiǎn)單、為
hibernate充當(dāng)可插入的緩存,最小的依賴(lài)性和全面的文檔和測(cè)試。

jta.jar:  java Transaction API (JTA) 規(guī)范的包,是指定事務(wù)和事務(wù)處理和分布式事務(wù)處理系統(tǒng)
之間的標(biāo)準(zhǔn),JAVA接口,包括資源管理,應(yīng)用服務(wù),和事務(wù)應(yīng)用程序。

log4j-1.2.9.jar:  hibernate 使用 Commons Logging  API 可以使用log4j作為實(shí)施,log的機(jī)制,如果
把log4j庫(kù)放到上下文類(lèi)目錄中,commons Logging 就會(huì)使用log4j 和它上下文類(lèi)路徑找到的log4j.properties文件

ant.jar:
Ant編譯工具的jar包,用來(lái)編譯Hibernate源代碼的。如果你不準(zhǔn)備修改和編譯Hibernate源代碼,那么就沒(méi)有什么用,可選的jar

c3p0.jar
C3PO是一個(gè)數(shù)據(jù)庫(kù)連接池,Hibernate可以配置為使用C3PO連接池。如果你準(zhǔn)備用這個(gè)連接池,就需要這個(gè)jar包。

jaas.jar:
JAAS是用來(lái)進(jìn)行權(quán)限驗(yàn)證的,已經(jīng)包含在JDK1.4里面了。所以實(shí)際上是多余的包。
有了以上基本的jar文件,對(duì)于我們現(xiàn)階段利用hibernate開(kāi)發(fā)一般的項(xiàng)目已經(jīng)足夠了。

問(wèn)題三:hibernate.cfg.xml詳解?
                <property name="show_sql">true</property>       是否打印hibernate執(zhí)行的SQL語(yǔ)句
        <property name="format_sql">true</property>     打印sql語(yǔ)句時(shí)是否執(zhí)行格式化
            <property name="dialect">org.hibernate.dialect.MySQLDialect</property>  配置數(shù)據(jù)庫(kù)的方言,主要是根據(jù)底層的數(shù)據(jù)庫(kù)不同產(chǎn)生不同的sql語(yǔ)句
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>  配置驅(qū)動(dòng)程序名
        <property name="connection.url">jdbc:mysql://localhost:3306/xubindb</property> 配置驅(qū)動(dòng)程序URL
        <property name="connection.username">root</property>        配置用戶(hù)名
        <property name="connection.password">1234</property>        配置密碼

        <mapping resource="xubin/ums/entity/Student.hbm.xml"/>   指定映射的實(shí)體類(lèi)的配置文件

問(wèn)題四:xxxx.hbm.xml詳解?
    
<hibernate-mapping package="xubin.ums.entity">         指定映射實(shí)體類(lèi)的包名

    <class name="Person" table="person">           實(shí)體類(lèi)名映射表名
        <id name="id" column="id">             ID生成策略
            <generator class="native"/>
        </id>
        <property name="name" column="name"/>  實(shí)體類(lèi)中的屬性名映射表中的字段名
        </class>
   
</hibernate-mapping>

問(wèn)題五:寫(xiě)hibernate代碼時(shí)要注意什么?

   1、首先要確保把hibernate所需用要的jar文件全部加入 classpath中(hibernate3.jar,  hibernate所需要的第三方jar,以及數(shù)據(jù)庫(kù)的驅(qū)動(dòng)等)
   2、配置hibernate.cfg.xml文件,注意程序要訪問(wèn)底層數(shù)據(jù)庫(kù)的類(lèi)型而采用不同的配置
   3、配置xxxx.hbm.xml文件,把實(shí)體類(lèi)的各部分分別與數(shù)據(jù)庫(kù)的表相映射起來(lái)
   4、編程hibernate操作的代碼
       
        Configuration config = new Configuration().configure();// 初始化并讀取hibernate.cfg.xml文件
        sessionFactory = config.buildSessionFactory(); //取得一個(gè)會(huì)話工廠
        Session session = sessionFactory.openSession();//利用會(huì)話工廠得到一個(gè)會(huì)話實(shí)體
        Transaction trans = session.beginTransaction();//設(shè)置事務(wù)的開(kāi)始
        session.save(obj); //持久化對(duì)象obj
        trans.commit();   //提交事務(wù)
        session.close();//關(guān)閉會(huì)話釋放資源
 

問(wèn)題六: hibernate中的ID生成策略。

hilo 高低位算法 :  使用時(shí)要建成一個(gè)單行單列的表,利用列的值根據(jù)算法來(lái)生成
increment:  只用于測(cè)試用,此操作只能限于一個(gè)線程操作
sequence: 針對(duì)oracle 數(shù)據(jù)庫(kù)來(lái)生成的ID規(guī)則
seqhilo: 利用 sequence 當(dāng)作種子來(lái)生成
uuid:  利用IP和時(shí)間來(lái)生成唯一的
identity:  針對(duì) mysql db2 sysbase 等不同的底層數(shù)據(jù)庫(kù)方言來(lái)生成
native: 跨數(shù)據(jù)庫(kù)平臺(tái)的生成規(guī)則, 讓自己去判斷數(shù)據(jù)庫(kù)來(lái)生成(identity ,  sequence , hilo 三種選)
assigned: 自定義的,意思就是自己要在程序中手動(dòng)的指定值
foreign:借用別的表的主鍵來(lái)生成ID
descriminator:  繼承關(guān)系映射時(shí)使用,整個(gè)層次一張表的建模時(shí)使用