Hibernate基礎(chǔ)學(xué)習(xí)經(jīng)驗(yàn)
在向大家詳細(xì)介紹Hibernate基礎(chǔ)之前,首先讓大家了解下老版本的JDBC,然后全面介紹Hibernate基礎(chǔ)。
一.老版本的JDBC
如果在用Hibernate操作比較老的JDBC版本時(shí)遇到了問(wèn)題, 那么請(qǐng)禁用下面這兩個(gè)JDBC 2特有的特性: 批量更新和滾動(dòng)的結(jié)果集.
◆Hibernate.jdbc.batch_size=0
◆Hibernate.jdbc.use_scrollable_resultsets=false
1.oracle驅(qū)動(dòng)
注: oracle安裝文件的jdbc目錄下的lib目錄中,有oracle所需的各種驅(qū)動(dòng). 支持所有平臺(tái)的JDBC Thin驅(qū)動(dòng)如: classes12.jar , ojdbc14.jar等等…
◆classes12.jar - JDK 1.2 和 JDK 1.3下使用
◆ojdbc14.jar - JDK 1.4以上使用
2.thin與oci訪問(wèn)的區(qū)別
這個(gè)是Oracle提供的兩套Java訪問(wèn)Oracle數(shù)據(jù)庫(kù)的方法。thin就是純粹用Java完成訪問(wèn)數(shù)據(jù)庫(kù)的所有方法,優(yōu)點(diǎn)是不用安裝客戶端;oci是Oracle Call Interface的首字母縮寫(xiě),就是使用Java來(lái)調(diào)用本機(jī)的Oracle客戶端,然后再訪問(wèn)數(shù)據(jù)庫(kù),優(yōu)點(diǎn)是速度快,但是需要安裝和配置數(shù)據(jù)庫(kù)。(oci方式連接數(shù)據(jù)庫(kù),如果不安裝oracle客戶端,我們必須將oracle的bin目錄中的oci.dll, ocijdbc9.dll, ociw32.dll copy到應(yīng)用所使用的JDK的bin目錄中.)
jdbc:oracle:thin:@ip地址:1521:實(shí)例名 換為 jdbc:oracle:oci@本地服務(wù)名 即可。如:從jdbc:oracle:thin:@10.1.1.2:1521:shdb改成:jdbc:oracle:oci8:@shdb. Shdb是數(shù)據(jù)庫(kù),非數(shù)據(jù)庫(kù)用戶.
二.Hibernate基礎(chǔ)——JMX
JMX是一個(gè)用來(lái)管理Java應(yīng)用和組件的標(biāo)準(zhǔn)API---主要通過(guò)Mbean訪問(wèn)這些應(yīng)用程序和組件.Mbean是服務(wù)和資源包裝器.
三.Hibernate基礎(chǔ)——XML配置
Hibernate.cfg.xml,它應(yīng)放在應(yīng)用程序類路徑的根目錄中.如果已經(jīng)使用了hibernate.properties,那么hibernate.cfg.xml會(huì)覆蓋hibenate.properties中的任何設(shè)置.
四.Hibernate基礎(chǔ)——自定義命名策略
假設(shè)CaveatEmptor中的所有表名都應(yīng)該遵循模式CE_<table_name>.一種解決方案是手工在映射文件中的所有<class>和集合元素上指定table屬性.然而,這種方法既費(fèi)時(shí)又容易遺忘.替代做法是,實(shí)現(xiàn)Hibnernate的NamingStrategy接口:
- Public class CENamingStrategy extends ImprovedNamingStrategy{
- Public String classToTableName(String className){
- Return StringHelper.unqualify(className);
- }
- Public String propertyToColumnName(String propertyName){
- Return propertyName;
- }
- Public String tableName(String tableName){
- Return “CE_”+tableName
- }
- Public String columnName(String columnName){
- Return columnName;
- }
- Public Strring propertyToTableName(String className,String propertyName){
- Return “CE_”+classToTableNmae(className)
- +”_”+propertyToColumnName(propertyName);
- }
- }
你擴(kuò)展了ImproveNameingStrategy,它對(duì)你不想從頭開(kāi)始實(shí)現(xiàn)的NamingStrategy的所有方法提供默認(rèn)實(shí)現(xiàn).僅當(dāng)<class>映射沒(méi)有指定顯式的table名稱時(shí)才調(diào)用classToTableName方法.如果屬性沒(méi)有顯式的column名稱,就調(diào)用propertyToColumnName()方法.當(dāng)聲明了顯式的名稱時(shí),則調(diào)用tableName()和columnName()方法.NamingStrategy接口的***特性是動(dòng)態(tài)行為的潛能.為了啟用一個(gè)特定的命名策略.可以在啟動(dòng)時(shí)把一個(gè)實(shí)例傳遞到Hibernate的Configuration:
- Configuration cfg = new Configuration();
- Cfg.setNamingStrategy(new CENameingStrategy());
- SessionFactory sessionFactory = cfg.configure().buildSessionFactory();
【編輯推薦】