凡是框架,就避免不了配置文件( or 注解),而 Hibernate 的配置文件是需要我们非常细心的,如果 Hibernate 配置文件配置的很精确的话,对数据库的操作是很方便的。
Hibernate 中的配置主要分为两种,一种是包含了 Hibernate 与数据库的基本连接信息,在 Hibernate 工作的初始阶段,这些信息被先后加载到 Configuration 和 SessionFactory 实例;另一种包含了 Hibernate 的基本映射信息,即项目中的每个类与其对应的数据库表之间的关联信息,在 Hibernate 工作的初始阶段,这些信息通过 Hibernate.cfg.xml 的 mapping 节点被加载到 Configuration 和 SessionFactory 实例。所以这两种配置文件信息包含了 Hibernate 的所有运行期间的参数。
一、 Hibernate 数据库配置文件:
实现包含了 Hibernate 与数据库的基本连接信息的配置方式有两种方式:
1、 使用 Hibernate.properties 文件作为配置文件;
2、 使用 Hibernate.cfg.xml 文件作为配置文件,一般都使用此方式居多;
1、 Hibenate.properties:
在 Hibernate 源码的 project 下的 etc 里有个 hibernate.properties 文件,该文件列出了 Hibernate 的所有属性,开发者只需要取消所需要配置段的注释即可快速配置 Hibernate 与数据库的连接。
Hibernate.properties 文件创建 Configuration 对象的方法:
Configuration cfg = new Configuration();// 实例化 Configuration 对象
cfg.addResource(“student.hbm.xml”);
cfg.addResource(“teacher.hbm.xml”);// 多次调用 Hibernate 里的映射文件
从上面我们也可以看出 hibernate.properties 文件只能配置 Hibernate 的一些属性,而对映射文件则需要代码手动添加,而如果项目比较大,类多,映射文件很多时,就显得比较繁琐,所以在实际开发中也不是很常用。
2、 Hibernate.cfg.xml :
以 MySql 为例:
<?xml version="1.0" encoding="UTF-8"?> <!--表明解析本XML文件的DTD文档位置,DTD是DocumentType Definition 的缩写,即文档类型的定义,XML解析器使用DTD文档来检查XML文件的合法性。hibernate.sourceforge.net/hibernate-configuration-3.0dtd可以在Hibernate软件包中的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:3306/db_springwebself,其中localhost表示mysql服务器名称,此处为本机,db_springwebself是数据库名--> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/db_springwebself</property> <!--连接数据库是用户名--> <property name="hibernate.connection.username">root</property> <!--连接数据库是密码--> <property name="hibernate.connection.password">123</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property> <!-- 自动提交 --> <property name="hibernate.connection.autocommit">true</property> <!--是否在后台显示Hibernate用到的SQL语句,开发时设置为true,便于差错,程序运行时可以在Eclipse的控制台显示Hibernate的执行Sql语句。项目部署后可以设置为false,提高运行效率--> <property name="show_sql">true</property> <!--指定映射文件为“org/lxh/student/Student.hbm.xml”--> <mapping resource="org/lxh/student/Student.hbm.xml"/> </session-factory> </hibernate-configuration>
说明:
1 、配置信息可以总结出, Hibernate.cfg.xml 配置文件是用来配置数据库连接信息的文件,并且指定 Hibernate 的映射文件;
2 、从上面可以看出 hibernate-configuration 是连接配置文件的根元素,它的内容可以配置多个 session-factory 子元素,使用 session-factory 的 name 属性来区分,一般情况下一个即可,在连接配置文件中, session-factory 的 property 子元素用来指定该工厂的属性值,其他如下:
hibernate.dialect :指定数据库名
hibernate.connection.pool_size :指定连接池的大小
hbm2dd.auto :根据需要是否自动创建数据库,其值有:
validate: 当 sessionFactory 创建时,自动验证或者 schema 定义导入数据库。
create: 每次启动都 drop 掉原来的 schema ,创建新的。
create-drop: 当 sessionFactory 明确关闭时, drop 掉 schema 。
update( 常用 ): 如果没有 schema 就创建,有就更新。
3 、 mapping 子元素是用来指定映射文件,需要注意的是 mapping 的 resource 属性用来指定映射文件的路径,每级目录用“ / ”分开,而不是常用的“ . ”;
4 、如果有多个映射文件,就使用多个 mapping 元素
5 、 Oracle 驱动: oracle.jdbc.driver.OracleDriver
6 、 MSSQL 驱动: net.sourceforge.jtds.jdbc.Driver
7 、 DB2 驱动: com.ibm.db2.jdbc.app.DB2Driver
8 、 sybase 驱动: com.sybase.jdbc.SybDrive
二、 Hibernate 映射文件:
Hibernate 映射文件就是为系统中每一个类与其对应的数据库表之间的关联信息,一般这些配置文件一般命名为:类名 .hbm.xml 。在映射文件中,主要有两部分组成,一是类和属性与表和字段的对应关系,二是表(实体)之间的关联关系(重要);
这里主要先说一下映射文件的简单对应关系,关联关系将在下一篇里详细的说明。
<?xml version="1.0" encoding='UTF-8'?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" > <hibernate-mapping package="包名"> <class name="类名" table="表名"> <id name="主键在java类中的字段名" column="对应表中字段" type="类型 "> <generator class="主键生成策略"/> </id> …… </class> </hibernate-mapping>
<span xmlns="http://www.w3.org/1999/xhtml" style=""><?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package=”com.iflytek.entity”> <class name="Student" table="tbl_student"> <id name="id" column="id" type="string"> <generator class="uuid"></generator> </id> <property name="name" column="name" type="string"></property> <property name="cardId" column="cardId" type="string"></property> <property name="age" column="age" type="int"></property> <set name="courses" table="tbl_course" cascade="save-update"> <key column="stu_id"></key> <many-to-many class="Course" column="course_id"> </many-to-many> </set> </class> </hibernate-mapping></span>
1 、 Hibernate-mapping 元素是所有 Hibernate 映射文件的根元素,这个根元素对所有的映射文件都相同;
2 、 Hibernate-mapping 元素上面是该 XML 映射文件的头部分,定义了该文件的 xml 版本和 DTD 声明,对所有 Hibernate3.x 的映射文件全部相同;
3 、 property 元素定义持久化类的普通属性,该持久化类有多少个普通属性,就需要有多少个 property 元素。其常用属性:
name :对应持久类的属性名
type :该属性的类型
column :该属性都在数据库中的列名
length :该属性的最大长度
not-null :该属性是否可以为空
lazy :加载时该属性是否为延迟加载
unique :该属性在数据库中是否是惟一的;
当然上面有的节点上存在很多可选属性,更加详细的信息我们可以在实际应用中查阅官方文档;