hibernate配置檔案hibernate.cfg.xml和.hbm.xml的詳細解釋
阿新 • • 發佈:2018-12-26
hibernate.cfg.xml
-標準的XML檔案的起始行,version='1.0'表明XML的版本,encoding='gb2312'表明XML檔案的編碼方式--> <?xml version='1.0' encoding='gb2312'?> <!--表明解析本XML檔案的DTD文件位置,DTD是Document Type Definition 的縮寫,即文件型別的定義,XML解析器使用DTD文件來檢查XML檔案的合法性。hibernate.sourceforge.net/hibernate-configuration-3.0dtd可以在Hibernate3.1.3軟體包中的src\org\hibernate目錄中找到此檔案--> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <!--宣告Hibernate配置檔案的開始--> <hibernate-configuration> <!--表明以下的配置是針對session-factory配置的,SessionFactory是Hibernate中的一個類,這個類主要負責儲存HIbernate的配置資訊,以及對Session的操作--> <session-factory> <!--配置資料庫的驅動程式,Hibernate在連線資料庫時,需要用到資料庫的驅動程式--> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver </property> <!--設定資料庫的連線url:jdbc:mysql://localhost/hibernate,其中localhost表示mysql伺服器名稱,此處為本機, hibernate是資料庫名--> <property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate</property> <!--連線資料庫是使用者名稱--> <property name="hibernate.connection.username">root </property> <!--連線資料庫是密碼--> <property name="hibernate.connection.password">123456 </property> <!--資料庫連線池的大小--> <property name="hibernate.connection.pool.size">20 </property> <!--是否在後臺顯示Hibernate用到的SQL語句,開發時設定為true,便於差錯,程式執行時可以在Eclipse的控制檯顯示Hibernate的執行Sql語句。專案部署後可以設定為false,提高執行效率--> <property name="hibernate.show_sql">true </property> <!--jdbc.fetch_size是指Hibernate每次從資料庫中取出並放到JDBC的Statement中的記錄條數。Fetch Size設的越大,讀資料庫的次數越少,速度越快,Fetch Size越小,讀資料庫的次數越多,速度越慢--> <property name="jdbc.fetch_size">50 </property> <!--jdbc.batch_size是指Hibernate批量插入,刪除和更新時每次操作的記錄數。Batch Size越大,批量操作的向資料庫傳送Sql的次數越少,速度就越快,同樣耗用記憶體就越大--> <property name="jdbc.batch_size">23 </property> <!--jdbc.use_scrollable_resultset是否允許Hibernate用JDBC的可滾動的結果集。對分頁的結果集。對分頁時的設定非常有幫助--> <property name="jdbc.use_scrollable_resultset">false </property> <!--connection.useUnicode連線資料庫時是否使用Unicode編碼--> <property name="Connection.useUnicode">true </property> <!--connection.characterEncoding連線資料庫時資料的傳輸字符集編碼方式,最好設定為gbk,用gb2312有的字元不全--> <property name="connection.characterEncoding">gbk </property> <!--hibernate.dialect 只是Hibernate使用的資料庫方言,就是要用Hibernate連線那種型別的資料庫伺服器。--> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect </property> <!--指定對映檔案為“hibernate/ch1/UserInfo.hbm.xml”--> <mapping resource="org/mxg/UserInfo.hbm.xml"> </session-factory> </hibernate-configuration> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> //連線驅動 <property name="driverClassName" value="${jdbc.driverClassName}" /> //連線url, <property name="url" value="${jdbc.url}" /> //連線使用者名稱 <property name="username" value="${jdbc.username}" /> //連線密碼 <property name="password" value="${jdbc.password}" /> </bean> <bean id="hbSessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation"> //hibernate配置檔案位置 <value>WEB-INF/hibernate.cfg.xml </value> </property> <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" /> <property name="hibernateProperties"> <props> //針對oracle資料庫的方言,特定的關係資料庫生成優化的SQL <prop key="hibernate.dialect"> org.hibernate.dialect.OracleDialect </prop> //選擇HQL解析器的實現 <prop key="hibernate.query.factory_class"> org.hibernate.hql.ast.ASTQueryTranslatorFactory </prop> //是否在控制檯列印sql語句 <prop key="hibernate.show_sql">true </prop> //在Hibernate系統引數中hibernate.use_outer_join被開啟的情況下,該引數用來允許使用outer join來載入此集合的資料。 <prop key="hibernate.use_outer_join">true </prop> //預設開啟,啟用cglib反射優化。cglib是用來在Hibernate中動態生成PO位元組碼的,開啟優化可以加快位元組碼構造的速度 <prop key="hibernate.cglib.use_reflection_optimizer">true </prop> //輸出格式化後的sql,更方便檢視 <prop key="hibernate.format_sql">true </prop> //“useUnicode”和“characterEncoding”決定了它是否在客戶端和伺服器端傳輸過程中進行Encode,以及如何進行Encode <prop key="hibernate.connection.useUnicode">true </prop> //允許查詢快取, 個別查詢仍然需要被設定為可快取的. <prop key="hibernate.cache.use_query_cache">false </prop> <prop key="hibernate.default_batch_fetch_size">16 </prop> //連線池的最大活動個數 <prop key="hibernate.dbcp.maxActive">100 </prop> //當連線池中的連線已經被耗盡的時候,DBCP將怎樣處理(0 = 失敗,1 = 等待,2 = 增長) <prop key="hibernate.dbcp.whenExhaustedAction">1 </prop> //最大等待時間 <prop key="hibernate.dbcp.maxWait">1200 </prop> //沒有人用連線的時候,最大閒置的連線個數 <prop key="hibernate.dbcp.maxIdle">10 </prop> ##以下是對prepared statement的處理,同上。 <prop key="hibernate.dbcp.ps.maxActive">100 </prop> <prop key="hibernate.dbcp.ps.whenExhaustedAction">1 </prop> <prop key="hibernate.dbcp.ps.maxWait">1200 </prop> <prop key="hibernate.dbcp.ps.maxIdle">10 </prop> </props> </property> </bean>
XXX.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <!-- <hibernate-mapping>一般不去配置,採用預設即可。 default-cascade="none":預設的級聯風格,表與表聯動。 default-lazy="true":預設延遲載入 --> <hibernate-mapping> <!-- <class>:使用class元素定義一個持久化類。 name="cn.javass.user.vo.UserModel":持久化類的java全限定名; table="tbl_user":對應資料庫表名; mutable="true":預設為true,設定為false時則不可以被應用程式更新或刪除; dynamic-insert="false":預設為false,動態修改那些有改變過的欄位,而不用修改所有欄位; dynamic-update="false":預設為false,動態插入非空值欄位; select-before-update="false":預設為false,在修改之前先做一次查詢,與使用者的值進行對比,有變化都會真正更新; optimistic-lock="version":預設為version(檢查version/timestamp欄位),取值:all(檢查全部欄位)、dirty(只檢查修改過的欄位)、 none(不使用樂觀鎖定),此引數主要用來處理併發,每條值都有固定且唯一的版本,版本為最新時才能執行操作; --> <class name="cn.javass.user.vo.UserModel" table="tbl_user" dynamic-insert="true" dynamic-update="true" optimistic-lock="version"> <!-- <id>:定義了該屬性到資料庫表主鍵欄位的對映。 name="userId":標識屬性的名字; column="userId":表主鍵欄位的名字,如果不填寫與name一樣; --> <id name="userId"> <!-- <generator>:指定主鍵由什麼生成,推薦使用uuid(隨機生成唯一通用的表示符,實體類的ID必須是String), native(讓資料庫自動選擇用什麼生成(根據底層資料庫的能力選擇identity,sequence或hilo中的一種)), assigned(指使用者手工填入,預設)。 --> <generator class="uuid"/> </id> <!-- <version/>:使用版本控制來處理併發,要開啟optimistic-lock="version"和dynamic-update="true"。 name="version":持久化類的屬性名,column="version":指定持有版本號的欄位名; --> <version name="version" column="version"/> <!-- <property>:為類定義一個持久化的javaBean風格的屬性。 name="name":標識屬性的名字,以小寫字母開頭; column="name":表主鍵欄位的名字,如果不填寫與name一樣; update="true"/insert="true":預設為true,表示可以被更新或插入; --> <property name="name" column="name" /> <property name="sex" column="sex"/> <property name="age" column="age"/> <!-- 元件對映:把多個屬性打包在一起當一個屬性使用,用來把類的粒度變小。 <component name="屬性,這裡指物件"> <property name="name1"></property> <property name="name2"></property> </component> --> <!-- <join>:一個物件對映多個表,該元素必須放在所有<property>之後。 <join table="tbl_test:子表名"> <key column="uuid:子表主鍵"></key> <property name="name1:物件屬性" column="name:子表字段"></property> </join> --> </class> </hibernate-mapping>