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
- 第十四章:重构服务层