Hibernate的核心配置文件必须放在src目录或与src同级的config目录下。由hibernate来加载。
一、作用
① 告诉hibernate要连接的数据库信息;
② 加载映射关系文件(类名.hbm.xml)的地址。注意是地址,即com/ly/hibernate/domain/类名.hbm.xml
二、那这个文件该如何写呢?--核心配置文件的配置
答案在:hibernate-release-5.0.7.Final\project\etc\hibernate.properties中早已经规定好如何写了。
2.0 添加dtd约束
hibernate-core-5.0.7.Final.jar 》 org.hibernte 》 hibernate-configuration-3.0.dtd文件
http://www.hibernate.org/... 需要联网才能使用此约束。或者将dtd约束文件添加到本地,参考:由xml约束引起的报错,即如何把约束(.xsd)文件导入MyEclipse中
2.1 数据库连接的基本参数
必须加载:①数据库的驱动
②数据库的地址
③数据库的用户名
④数据库的密码
⑤数据库的方言
<!-- 数据的驱动 -->
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<!-- 数据库的地址 -->
<property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
<!-- 数据库的用户名 -->
<property name="hibernate.connection.username">ly1</property>
<!-- 数据库的密码 -->
<property name="hibernate.connection.password">ly1</property>
<!-- 数据库的方言:因为hibernate可以自动生成SQL,方言的设置是让hibernate知道生成哪个数据库的sql语句,以oracle为例 -->
<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
源码的配置文件 方言部分截图,可参考:
2.2 其他属性
可选择加载:①c3p0的配置
②控制显示sql语句(默认hibernate自动生成的SQL我们是不显示的,默认多长的SQL都一行显示)
③让sql语句格式化(让上面显示的过长的SQL自动分行)
④让Hibernate根据映射关系自动生成数据库的表,默认不主动创建表
<!-- 告诉hibernate要用c3p0 -->
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<!-- hibernate自动生成的sql语句在控制台显示出来,SQL默认一行,不管多长 -->
<property name="hibernate.show_sql">true</property>
<!-- 显示的sql语句更加的格式化 -->
<property name="hibernate.format_sql">true</property>
<!-- 让hibernate根据映射关系自动生成数据库的表 默认hibernate不会主动创建表
create:没有表创建表;有表删除表再创建表 //做测试(当数据特别大时,每次都只显示最新数据,测试意义好像也不大的样子),实际生产没有意义
create-drop:没有表创建表;有表删除掉创建表 用完就全删 //没实际用途,实际生产没有意义
update: 没有表,创建表 ;有表,使用表 //企业开发使用
validate:默认 不创建 -->
<property name="hibernate.hbm2ddl.auto">update</property>
2.3 映射文件加载
<!-- 加载映射关系文件(Customer.hbm.xml)的地址 -->
<mapping resource="com/ly/hibernate/domain/Customer.hbm.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-core-5.0.7.Final.jar 》 org.hibernte 》 hibernate-configuration-3.0.dtd文件
http://www.hibernate.org/... 需要联网才能使用此约束 -->
<!-- 告诉hibernate要连接的数据库信息 -->
<hibernate-configuration>
<!-- 是生产session的工厂 hibernate里的session是connection的意思,和servlet里的session一点也不一样 -->
<session-factory>
<!-- 数据的驱动 -->
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<!-- 数据库的地址 -->
<property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
<!-- 数据库的用户名 -->
<property name="hibernate.connection.username">ly1</property>
<!-- 数据库的密码 -->
<property name="hibernate.connection.password">ly1</property>
<!-- 数据库的方言
分页: 不同数据库的有些sql不一致
mysql: select * from 表 limit ?,?
sqlserver: select * from 表 top ?,?
oracle: 嵌套
因为hibernate可以自动生成SQL,方言的设置是让hibernate知道生成哪个数据库的 sql语句 ,以oracle为例:
-->
<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
<!-- 告诉hibernate要用c3p0 -->
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<!-- hibernate自动生成的sql语句在控制台显示出来,SQL默认一行,不管多长 -->
<property name="hibernate.show_sql">true</property>
<!-- 显示的sql语句更加的格式化 -->
<property name="hibernate.format_sql">true</property>
<!-- 让hibernate根据映射关系自动生成数据库的表 默认hibernate不会主动创建表
create:没有表创建表;有表删除表再创建表 //做测试(当数据特别大时,每次都只显示最新数据,测试意义好像也不大的样子),实际生产没有意义
create-drop:没有表创建表;有表删除掉创建表 用完就全删 //没实际用途,实际生产没有意义
update: 没有表,创建表 ;有表,使用表 //企业开发使用
validate:默认 不创建
-->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 加载映射关系文件(Customer.hbm.xml)的地址 -->
<mapping resource="com/ly/hibernate/domain/Customer.hbm.xml"/>
</session-factory>
</hibernate-configuration>