Hibernate开发之配置文件
一丶概述
Hibernate的配置文件主要用于配置数据库连接和hibernate运行时所需的各种属性,每个 Hibernate 配置文件对应一个Configuration 对象,
Hibernate的主配置文件有2中格式,现在推荐采用Hibernate.cfg.xml。在Hibernate配置文件中还要包括反映射情况的xml文档.,这个映射文件通
常命名为*.hbm.xml。这个映射文件主要用于映射持久化类和数据表之间的对应关系,在运行时 Hibernate 将根据这个映射文件来生成各种 SQL
语句。
二丶Hibernate.cfg.xml常用属性
以下为property元素的属性。
1.JDBC的连接属性
1) connection.url:数据库URL
2) connection.username:数据库用户名
3) connection.password:数据库用户密码
4) dialect:配置数据库的方言,根据底层的数据库不同产生不同的 sql 语句,Hibernate 会针对数据库的特性在访问时进行 优化
引用代码如下:
2.配置C3P0数据源
(1). 配置步骤
先导入相应jar包:Hibernate-release-4.3.0.final\lib\optional\c3p0\*.jar
然后在Hibernate.cfg.xml里配置C3P0数据源,相应配置属性及解释如下:
(2). C3P0 数据库连接池属性
1) hibernate.c3p0.max_size: 数据库连接池的最大连接数
2) hibernate.c3p0.min_size: 数据库连接池的最小连接数
2) hibernate.c3p0.min_size: 数据库连接池的最小连接数
3) hibernate.c3p0.timeout: 数据库连接池中连接对象的保存时间
4) hibernate.c3p0.max_statements: 缓存 Statement 对象的数量
5) hibernate.c3p0.idle_test_period: 表示连接池检测线程多长时间检测一次池内的所有链接对象是否超时. 连接池本身不会 把自己从连接池中移除,而是专门有一个线程按照一定的时间间隔来做这件事,这个线程通过比较连接对象最后一次被使 用时间和当前时间的时间差来和 timeout 做对比,进而决定是否销毁这个连接对象。
6) hibernate.c3p0.acquire_increment: 当数据库连接池中的连接耗尽时, 同一时刻获取多少个数据库连接
6) hibernate.c3p0.acquire_increment: 当数据库连接池中的连接耗尽时, 同一时刻获取多少个数据库连接
3.其它常用属性
(1) show_sql:是否将运行期生成的SQL输出到日志以供调试。取值 true | false
(2)format_sql:是否将 SQL 转化为格式良好的 SQL . 取值 true | false
(3)hbm2ddl.auto:在启动和停止时自动地创建,更新或删除数据库模式。取值 create | update | create-drop | validate
(2)format_sql:是否将 SQL 转化为格式良好的 SQL . 取值 true | false
(3)hbm2ddl.auto:在启动和停止时自动地创建,更新或删除数据库模式。取值 create | update | create-drop | validate
4.装载映射
文件
<
三丶*.hbm.xml配置文件
在这个配置文件中可以同时定义多个类,但推荐的做法是为每个持久化类都配置一个映射文件,在这个配置文件中开始时的元素是Hibernate-maping,然后我将依次详细的说明每个元素及其属性。
1. Hibernate-mapping
(1) hibernate-mapping 是 hibernate 映射文件的根元素
(2) schema: 指定所映射的数据库schema的名称。若指定该属性, 则表明会自动添加该 schema 前缀
(3) catalog:指定所映射的数据库catalog的名称。
(4) default-cascade(默认为 none): 设置hibernate默认的级联风格. 若配置 Java 属性, 集合映射时没有指定 cascade 属性, 则 Hibernate 将采 用此处指定的级联风格.
(5) default-access (默认为 property): 指定 Hibernate 的默认的属性访问策略。默认值为 property, 即使用 getter, setter 方法来访问属性. 若指 定access, 则 Hibernate 会忽略 getter/setter 方法, 而通过反射访问成员变量.
(6) default-lazy(默认为 true): 设置 Hibernat morning的延迟加载策略. 该属性的默认值为 true, 即启用延迟加载策略. 若配置 Java 属性映射, 集 合映射时没有指定 lazy 属性, 则 Hibernate 将采用此处指定的延迟加载策略
(7) auto-import (默认为 true): 指定是否可以在查询语言中使用非全限定的类名(仅限于本映射文件中的类)。
(8) package (可选): 指定一个包前缀,如果在映射文档中没有指定全限定的类名, 就使用这个作为包名。
(2) schema: 指定所映射的数据库schema的名称。若指定该属性, 则表明会自动添加该 schema 前缀
(3) catalog:指定所映射的数据库catalog的名称。
(4) default-cascade(默认为 none): 设置hibernate默认的级联风格. 若配置 Java 属性, 集合映射时没有指定 cascade 属性, 则 Hibernate 将采 用此处指定的级联风格.
(5) default-access (默认为 property): 指定 Hibernate 的默认的属性访问策略。默认值为 property, 即使用 getter, setter 方法来访问属性. 若指 定access, 则 Hibernate 会忽略 getter/setter 方法, 而通过反射访问成员变量.
(6) default-lazy(默认为 true): 设置 Hibernat morning的延迟加载策略. 该属性的默认值为 true, 即启用延迟加载策略. 若配置 Java 属性映射, 集 合映射时没有指定 lazy 属性, 则 Hibernate 将采用此处指定的延迟加载策略
(7) auto-import (默认为 true): 指定是否可以在查询语言中使用非全限定的类名(仅限于本映射文件中的类)。
(8) package (可选): 指定一个包前缀,如果在映射文档中没有指定全限定的类名, 就使用这个作为包名。
2. class
class 元素用于指定类和表的映射
(1)name:指定该持久化类映射的持久化类的类名
(2)table:指定该持久化类映射的表名, Hibernate 默认以持久化类的类名作为表名
(3)dynamic-insert: 若设置为 true, 表示当保存一个对象时, 会动态生成 insert 语句, insert 语句中仅包含所有取值不为 null 的字段. 默认值为 false
(4)dynamic-update: 若设置为 true, 表示当更新一个对象时, 会动态生成 update 语句, update 语句中仅包含所有取值需要更新的字段. 默认值 为 false
(5)select-before-update:设置 Hibernate 在更新某个持久化对象之前是否需要先执行一次查询. 默认值为 false
(6)batch-size:指定根据 OID 来抓取实例时每批抓取的实例数.
(7)lazy: 指定是否使用延迟加载.
(8)mutable: 若设置为 true, 等价于所有的 <property> 元素的 update 属性为 false, 表示整个实例不能被更新. 默认为 true.
(9)discriminator-value: 指定区分不同子类的值. 当使用 <subclass/> 元素来定义持久化类的继承关系时需要使用该属性
(2)table:指定该持久化类映射的表名, Hibernate 默认以持久化类的类名作为表名
(3)dynamic-insert: 若设置为 true, 表示当保存一个对象时, 会动态生成 insert 语句, insert 语句中仅包含所有取值不为 null 的字段. 默认值为 false
(4)dynamic-update: 若设置为 true, 表示当更新一个对象时, 会动态生成 update 语句, update 语句中仅包含所有取值需要更新的字段. 默认值 为 false
(5)select-before-update:设置 Hibernate 在更新某个持久化对象之前是否需要先执行一次查询. 默认值为 false
(6)batch-size:指定根据 OID 来抓取实例时每批抓取的实例数.
(7)lazy: 指定是否使用延迟加载.
(8)mutable: 若设置为 true, 等价于所有的 <property> 元素的 update 属性为 false, 表示整个实例不能被更新. 默认为 true.
(9)discriminator-value: 指定区分不同子类的值. 当使用 <subclass/> 元素来定义持久化类的继承关系时需要使用该属性
3. property
property 元素用于指定类的属性和表的字段的映射
(1)name:指定该持久化类的属性的名字(2)column:指定与类的属性映射的表的字段名. 如果没有设置该属性, Hibernate 将直接使用类的属性名作为字段名.
(3)type:指定 Hibernate 映射类型
(4)formula:设置一个 SQL 表达式, Hibernate 将根据它来计算出派生属性的值.
四丶标识符生成器
Hibernate 使用对象标识符(OID) 来建立内存中的对象和数据库表中记录的对应关系。 对象的 OID 和数据表的主键对应。Hibernate 通过标识符生成器来为主键赋值,Hibernate 推荐在数据表中使用代理主键, 即不具备业务含义的字段.,代理主键通常为整数类型,因为整数类型比字符串类型要节省更多的数据库空间。在对象-关系映射文件中,,<id> 元素用来设置对象标识。 <generator> 子元素用来设定标识符生成器。Hibernate 提供了标识符生成器接口:IdentifierGenerator, 并提供了各种内置实现。以下为几种常用的标识符生成器:
(1)increment:适用于代理主键,由 Hibernate 以递增的方式为代理主键赋值,Hibernate 会先读取表中的主键的最大值, 而接下来向表中插入记录时, 就在 max(id) 的基础上递增, 增量为 1。
(2)identity:适用于代理主键,由底层数据库实现。
(3)sequence:sequence 标识符生成器利用底层数据库提供的序列来生成标识符。
(4)hilo:hilo 标识符生成器由 Hibernate 按照一种 high/low 算法*生成标识符, 它从数据库的特定表的字段中获取 high 值。
(5)native:native 标识符生成器依据底层数据库对自动生成标识符的支持能力, 来选择使用 identity, sequence 或 hilo 标识符生成器。