Hibernate的配置文件和struts一樣,也可以使用一個xml文件(實際上,在整個項目,我們也只使用xml的形式來定制配置文件).
# 初始化配置文件
我們在struts.xml中的同級文件夾中,建立hibernate.cfg.xml。并鍵入以下配置信息.
```
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<!-- hibernate配置信息 -->
<hibernate-configuration>
<!-- session 工廠配置信息 -->
<session-factory>
</session-factory>
</hibernate-configuration>
```
如果沒有教程,或是我們使用了新的版本的hibernate的話,如何去定制上述信息呢?最簡單的方法:搜索我們下載的hibernate文件夾中以.cfg.xml結尾的文件,隨便打開一個,把代碼COPY過來,然后去除session-factory中的內容就可以了。
# 基本配置信息
```
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<!-- hibernate配置信息 -->
<hibernate-configuration>
<!-- session 工廠配置信息 -->
<session-factory>
<!-- 數據庫連接區動, 位于資源庫中的com.mysql.jdbc.Driver -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 數據庫連接信息jdbc:數據庫類型://地址/數據庫名 -->
<property name="connection.url">jdbc:mysql://localhost/javaee</property>
<!-- 用戶名 -->
<property name="connection.username">root</property>
<!-- 密碼 -->
<property name="connection.password"></property>
<!-- 編碼格式 -->
<property name="connection.characterEncoding">utf-8</property>
<!-- SQL 方言(不同的數據庫除實現了標準的SQL外,還有一些自己的特性) -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 啟用hibernate自動session上下文管理(現在不需要理解)-->
<property name="current_session_context_class">thread</property>
<mapping class="entity.Teacher" />
</session-factory>
</hibernate-configuration>
```
# 測試
## 配置文件讀取
在src目錄上新建包hibernate,在包中創建測試配置文件讀取的類TestCfgXml,代碼如下:
```
package hibernate;
import org.hibernate.cfg.Configuration;
import org.junit.Test;
public class TestCfgXml {
@Test
public void TestConfig () {
// 加載并讀取配置文件
Configuration configuration = new Configuration();
// 打印讀取到的屬性
System.out.println(configuration.getProperties());
// 打印數據庫連接用戶名
System.out.println(configuration.getProperty("hibernate.connection.username"));
}
}
```
控制臺輸出信息
```
INFO: HHH000043: Configuring from resource: /hibernate.cfg.xml
一月 06, 2017 8:10:58 上午 org.hibernate.cfg.Configuration getConfigurationInputStream
配置文件信息
INFO: HHH000040: Configuration resource: /hibernate.cfg.xml
一月 06, 2017 8:10:58 上午 org.hibernate.cfg.Configuration doConfigure
INFO: HHH000041: Configured SessionFactory: null
讀取到的配置信息
{hibernate.connection.password=, java.runtime.name=Java(TM) SE Runtime Environment, sun.boot.library.path=/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib, java.vm.version=25.111-b14, hibernate.connection.username=root, gopherProxySet=false, java.vm.vendor=Oracle Corporation, java.vendor.url=http://java.oracle.com/, path.separator=:, java.vm.name=Java HotSpot(TM) 64-Bit Server VM, file.encoding.pkg=sun.io, user.country=CN, sun.java.launcher=SUN_STANDARD, sun.os.patch.level=unknown, java.vm.specification.name=Java Virtual Machine Specification, user.dir=/Users/panjie/Documents/workspace/javaee, java.runtime.version=1.8.0_111-b14, java.awt.graphicsenv=sun.awt.CGraphicsEnvironment, hibernate.current_session_context_class=thread, java.endorsed.dirs=/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/endorsed, os.arch=x86_64, java.io.tmpdir=/var/folders/68/65nh8dx533g0wj16n406j2v00000gn/T/, line.separator=
, java.vm.specification.vendor=Oracle Corporation, os.name=Mac OS X, hibernate.connection.characterEncoding=utf-8, sun.jnu.encoding=UTF-8, java.library.path=/Users/panjie/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:., java.specification.name=Java Platform API Specification, java.class.version=52.0, sun.management.compiler=HotSpot 64-Bit Tiered Compilers, connection.characterEncoding=utf-8, os.version=10.10.4, http.nonProxyHosts=local|*.local|169.254/16|*.169.254/16, connection.password=, user.home=/Users/panjie, user.timezone=Asia/Shanghai, connection.username=root, java.awt.printerjob=sun.lwawt.macosx.CPrinterJob, file.encoding=UTF-8, java.specification.version=1.8, hibernate.connection.driver_class=com.mysql.jdbc.Driver, java.class.path=/Users/panjie/Documents/workspace/javaee/build/classes:/Library/tomcat-7.0.73/bin/bootstrap.jar:/Library/tomcat-7.0.73/bin/commons-daemon.jar:/Library/tomcat-7.0.73/bin/tomcat-juli.jar:/Users/panjie/Documents/workspace/javaee/WebContent/WEB-INF/lib/antlr-2.7.7.jar:/Users/panjie/Documents/workspace/javaee/WebContent/WEB-INF/lib/asm-3.3.jar:/Users/panjie/Documents/workspace/javaee/WebContent/WEB-INF/lib/asm-commons-3.3.jar:/Users/panjie/Documents/workspace/javaee/WebContent/WEB-INF/lib/asm-tree-3.3.jar:/Users/panjie/Documents/workspace/javaee/WebContent/WEB-INF/lib/commons-fileupload-1.3.2.jar:/Users/panjie/Documents/workspace/javaee/WebContent/WEB-INF/lib/commons-io-2.2.jar:/Users/panjie/Documents/workspace/javaee/WebContent/WEB-INF/lib/commons-lang3-3.2.jar:/Users/panjie/Documents/workspace/javaee/WebContent/WEB-INF/lib/dom4j-1.6.1.jar:/Users/panjie/Documents/workspace/javaee/WebContent/WEB-INF/lib/freemarker-2.3.22.jar:/Users/panjie/Documents/workspace/javaee/WebContent/WEB-INF/lib/hibernate-commons-annotations-4.0.2.Final.jar:/Users/panjie/Documents/workspace/javaee/WebContent/WEB-INF/lib/hibernate-core-4.2.4.Final.jar:/Users/panjie/Documents/workspace/javaee/WebContent/WEB-INF/lib/hibernate-jpa-2.0-api-1.0.1.Final.jar:/Users/panjie/Documents/workspace/javaee/WebContent/WEB-INF/lib/javassist-3.11.0.GA.jar:/Users/panjie/Documents/workspace/javaee/WebContent/WEB-INF/lib/javassist-3.15.0-GA.jar:/Users/panjie/Documents/workspace/javaee/WebContent/WEB-INF/lib/jboss-logging-3.1.0.GA.jar:/Users/panjie/Documents/workspace/javaee/WebContent/WEB-INF/lib/jboss-transaction-api_1.1_spec-1.0.1.Final.jar:/Users/panjie/Documents/workspace/javaee/WebContent/WEB-INF/lib/log4j-api-2.3.jar:/Users/panjie/Documents/workspace/javaee/WebContent/WEB-INF/lib/log4j-core-2.3.jar:/Users/panjie/Documents/workspace/javaee/WebContent/WEB-INF/lib/mysql-connector-java-5.0.8-bin.jar:/Users/panjie/Documents/workspace/javaee/WebContent/WEB-INF/lib/ognl-3.0.19.jar:/Users/panjie/Documents/workspace/javaee/WebContent/WEB-INF/lib/struts2-core-2.3.31.jar:/Users/panjie/Documents/workspace/javaee/WebContent/WEB-INF/lib/xwork-core-2.3.31.jar:/Users/panjie/java/eclipse/plugins/org.junit_4.11.0.v201303080030/junit.jar:/Users/panjie/java/eclipse/plugins/org.hamcrest.core_1.3.0.v201303031735.jar:/Users/panjie/java/eclipse/configuration/org.eclipse.osgi/bundles/359/1/.cp/:/Users/panjie/java/eclipse/configuration/org.eclipse.osgi/bundles/358/1/.cp/, user.name=panjie, hibernate.bytecode.use_reflection_optimizer=false, current_session_context_class=thread, java.vm.specification.version=1.8, sun.java.command=org.eclipse.jdt.internal.junit.runner.RemoteTestRunner -version 3 -port 50069 -testLoaderClass org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader -loaderpluginname org.eclipse.jdt.junit4.runtime -test hibernate.TestCfgXml:TestConfig, java.home=/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre, sun.arch.data.model=64, hibernate.dialect=org.hibernate.dialect.MySQLDialect, hibernate.connection.url=jdbc:mysql://localhost/javaee, user.language=zh, java.specification.vendor=Oracle Corporation, awt.toolkit=sun.lwawt.macosx.LWCToolkit, java.vm.info=mixed mode, java.version=1.8.0_111, java.ext.dirs=/Users/panjie/Library/Java/Extensions:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/ext:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java, sun.boot.class.path=/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/sunrsasign.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/classes, java.vendor=Oracle Corporation, connection.driver_class=com.mysql.jdbc.Driver, file.separator=/, java.vendor.url.bug=http://bugreport.sun.com/bugreport/, sun.io.unicode.encoding=UnicodeBig, sun.cpu.endian=little, socksNonProxyHosts=local|*.local|169.254/16|*.169.254/16, connection.url=jdbc:mysql://localhost/javaee, ftp.nonProxyHosts=local|*.local|169.254/16|*.169.254/16, dialect=org.hibernate.dialect.MySQLDialect, sun.cpu.isalist=}
讀取到的用戶名
root
```
在進行讀取時,控制臺為我們自動打印了請求的配置文件的位置。同時,我們使用系統的println打印了獲取到的配置信息.
## 錯誤示例
### 配置文件名錯誤
不能正確的打印出讀取到的屬性值
```
一月 06, 2017 8:14:55 上午 org.hibernate.annotations.common.Version <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {4.0.2.Final}
一月 06, 2017 8:14:55 上午 org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {4.2.4.Final}
一月 06, 2017 8:14:55 上午 org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
一月 06, 2017 8:14:55 上午 org.hibernate.cfg.Environment buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : javassist
一月 06, 2017 8:14:55 上午 org.hibernate.cfg.Configuration configure
INFO: HHH000043: Configuring from resource: /hibernate.cfg.xml
一月 06, 2017 8:14:55 上午 org.hibernate.cfg.Configuration getConfigurationInputStream
INFO: HHH000040: Configuration resource: /hibernate.cfg.xml
// 配置正確,這里應該顯示配置值。
```
### 配置格式錯誤
在eclipse中,會以紅色的X來警告配置文件出錯。
- README
- 第一章:準備
- 第二章:Hello World!
- 第一節:查看工程文件
- 第二節:JDK、JRE與環境變量
- 第三節:index.jsp
- 第三章:Hello Struts
- 第一節:Web.xml
- 第二節:單入口
- 第三節:Hello Struts
- 第四節:觸發C層
- 第四章:建立數據表
- 第一節:建立實體類
- 第二節:測試一
- 第三節:測試二
- 第四節:引入Hibernate
- 第五節:配置Hibernate
- 第六節:建立連接
- 第七節:實體類映射數據表
- 第八節:完善數據表
- 第五章:教師管理
- 第一節:增加數據--add
- 第二節:增加數據--save
- 1 獲取傳入數據數據
- 2 數據寫入測試
- 3 對接C層
- 第三節:數據列表
- 1 獲取數據
- 2 重構代碼
- 3 C層對接--初始化
- 4 C層添加數據
- 5 V層顯示數據
- 6 獲取數據庫中數據
- 7 顯示性別
- 8 分頁
- 9 條件查詢
- 第四節:修改數據
- 1 edit
- 2 update
- 第五節:刪除數據
- 第六節:總結
- 第六章:重構C層
- 第一節:繼承ActionSupport類
- 第二節:數據驗證
- 第七章:前臺分離(前臺)
- 第一節:環境搭建
- 第二節:運行環境
- 第三節:共享開發環境
- 第四節:生產環境
- 第八章:前臺開發(前臺)
- 第一節:本地化
- 第二節:教師列表
- 1 引入M層
- 2 模擬后臺返回數據
- 3 C與M對接
- 4 C與V對接
- 第九章:前后臺對接(前后臺)
- 第一節:后臺輸出json(后臺)
- 第二節:對接前臺(全棧)
- 第二節:對接API(前臺)
- 第二節:跨域請求(后臺)
- 第三節:重構代碼(前臺)
- 第十章:重構后臺M層
- 第一節:數據訪問DAO層
- 第二節:項目整體重構
- 第十一章:用戶登陸(前后臺)
- 第一節:制定規范
- 第二節:定制測試用例
- 第三節:后臺輸入測試代碼(后臺)
- 第四節:postman(后臺)
- 第五節:新建用戶登陸模塊(前臺)
- 第六節:代碼重構(前臺)
- 第十二章:班級管理(前后臺)
- 第一節:班級列表
- 1 原型開發
- 2 制定規范
- 3 后臺對接開發
- 4 前臺對接開發
- 第二節:Add
- 1 原型開發
- 2 制定規范
- 3 后臺對接開發
- 4 前臺對接開發
- 第三節:Save
- 1 制定規范
- 2 后臺對接開發
- 3 前臺對接開發
- 第四節:Edit
- 1 原型開發
- 2 制定規范
- 3 后臺對接開發
- 4 前臺對接開發
- 第五節:Update
- 1 制定規范
- 2 后臺對接開發
- 3 前臺對接開發
- 第六節:Delete
- 1 制定規范
- 2 后臺對接開發
- 3 前臺對接開發
- 第七節:小結
- 第十三章:班級管理(API)
- 第一節:ER圖
- 第二節:create
- 1 實體層
- 2 dao層
- 3 service(server)層
- 4 action層
- 第三節:ManyToOne
- 第四節:Read
- 1 service(server)層
- 2 action層
- 第五節:update
- 1 service(server)層
- 2 action層
- 第六節:update
- 第十四章:重構服務層