問題一: hibernate是什么?
hibernate一種ORM工具,是連接 java 應用程序和關系數據庫的中間件,這是對JDBC的封裝,主要負責 java 對象的持久化.
問題二:hibernate中所需要的各 jar 分別起什么作用?
hibernate3.jar 編譯hibernate所必須的jar 文件
第三方 jar文件(即hibernate自身所使用的其它jar文件,有以下介紹的jar文件,目前階級對于我們開發一個使用hibernate技術底層實現的項目已經夠用了)
antlr-2.7.6rc1.jar :
ANTLR (ANother Tool for Language Recognition)
是一個PCCTS制定的語言工具,它為他創建認定者,程序編譯者,翻譯者提供
一個包括 java,c#和C++在內的語法描述框架,使用from 多態查詢語句時需要它。
cglib-2.1.3.jar:
CGL (Code Generation Libray) 是一種高性能,高質量
的代碼產生庫, hibernate 用它來實現 po (persistent object)字節碼的動態生成
asm.jar和asm-attrs.jar: ObjectWeb的字節碼操縱框架,用來動態生成java代碼。
commons-collections-2.1.1.jar : Apache Commons 包中的一個,包含了一些Apache
開發的集合類,功能比java.util.*;強大
commons-logging-1.0.4.jar: Jakarta的通用日志記錄包
dom4j-1.6.1.jar: 是一個JAVA的XML API 類似于jdom,用來讀寫XML文件,dom4j是一個非常
優秀的JAVA XML API, 具有性能優異,功能強大和易使用的特點,同時它也是一個開放源代碼
的軟件,可以在 SourceForge上找到它。
eheache-1.1.jar: EHCahe是一個純JAVA的進程中的緩存,它具有經下特性,快速、簡單、為
hibernate充當可插入的緩存,最小的依賴性和全面的文檔和測試。
jta.jar: java Transaction API (JTA) 規范的包,是指定事務和事務處理和分布式事務處理系統
之間的標準,JAVA接口,包括資源管理,應用服務,和事務應用程序。
log4j-1.2.9.jar: hibernate 使用 Commons Logging API 可以使用log4j作為實施,log的機制,如果
把log4j庫放到上下文類目錄中,commons Logging 就會使用log4j 和它上下文類路徑找到的log4j.properties文件
ant.jar:
Ant編譯工具的jar包,用來編譯Hibernate源代碼的。如果你不準備修改和編譯Hibernate源代碼,那么就沒有什么用,可選的jar包
c3p0.jar:
C3PO是一個數據庫連接池,Hibernate可以配置為使用C3PO連接池。如果你準備用這個連接池,就需要這個jar包。
jaas.jar:
JAAS是用來進行權限驗證的,已經包含在JDK1.4里面了。所以實際上是多余的包。
有了以上基本的jar文件,對于我們現階段利用hibernate開發一般的項目已經足夠了。
問題三:hibernate.cfg.xml詳解?
<property name="show_sql">true</property> 是否打印hibernate執行的SQL語句
<property name="format_sql">true</property> 打印sql語句時是否執行格式化
<property name="dialect">org.hibernate.dialect.MySQLDialect</property> 配置數據庫的方言,主要是根據底層的數據庫不同產生不同的sql語句
<property name="connection.driver_class">com.mysql.jdbc.Driver</property> 配置驅動程序名
<property name="connection.url">jdbc:mysql://localhost:3306/xubindb</property> 配置驅動程序URL
<property name="connection.username">root</property> 配置用戶名
<property name="connection.password">1234</property> 配置密碼
<mapping resource="xubin/ums/entity/Student.hbm.xml"/> 指定映射的實體類的配置文件
問題四:xxxx.hbm.xml詳解?
<hibernate-mapping package="xubin.ums.entity"> 指定映射實體類的包名
<class name="Person" table="person"> 實體類名映射表名
<id name="id" column="id"> ID生成策略
<generator class="native"/>
</id>
<property name="name" column="name"/> 實體類中的屬性名映射表中的字段名
</class>
</hibernate-mapping>
問題五:寫hibernate代碼時要注意什么?
1、首先要確保把hibernate所需用要的jar文件全部加入 classpath中(hibernate3.jar, hibernate所需要的第三方jar,以及數據庫的驅動等)
2、配置hibernate.cfg.xml文件,注意程序要訪問底層數據庫的類型而采用不同的配置
3、配置xxxx.hbm.xml文件,把實體類的各部分分別與數據庫的表相映射起來
4、編程hibernate操作的代碼
Configuration config = new Configuration().configure();// 初始化并讀取hibernate.cfg.xml文件
sessionFactory = config.buildSessionFactory(); //取得一個會話工廠
Session session = sessionFactory.openSession();//利用會話工廠得到一個會話實體
Transaction trans = session.beginTransaction();//設置事務的開始
session.save(obj); //持久化對象obj
trans.commit(); //提交事務
session.close();//關閉會話釋放資源
問題六: hibernate中的ID生成策略。
hilo 高低位算法 : 使用時要建成一個單行單列的表,利用列的值根據算法來生成
increment: 只用于測試用,此操作只能限于一個線程操作
sequence: 針對oracle 數據庫來生成的ID規則
seqhilo: 利用 sequence 當作種子來生成
uuid: 利用IP和時間來生成唯一的
identity: 針對 mysql db2 sysbase 等不同的底層數據庫方言來生成
native: 跨數據庫平臺的生成規則, 讓自己去判斷數據庫來生成(identity , sequence , hilo 三種選)
assigned: 自定義的,意思就是自己要在程序中手動的指定值
foreign:借用別的表的主鍵來生成ID
descriminator: 繼承關系映射時使用,整個層次一張表的建模時使用