配置文件中映射元素详解

对象关系的映射是用一个XML文档来说明的。映射文档可以使用工具来生成,如XDoclet,Middlegen和AndroMDA等。下面从一个映射的例子开始讲解映射元素,映射文件的代码如下。

<?xml version="1.0"?>
<!--
所有的XML映射文件都需要定义如下所示的DOCTYPE。
Hibernate会先在它的类路径(classptah)中搜索DTD文件。
-->
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
hibernate-mapping有几个可选的属性:
schema属性指明了这个映射的表所在的schema名称。
default-cascade属性指定了默认的级联风格 可取值有 none、save、update。
auto-import属性默认让我们在查询语言中可以使用非全限定名的类名 可取值有 true、false。
package属性指定一个包前缀。
-->
<hibernate-mapping schema="schemaName" default-cascade="none"
auto-import="true" package="test">
<!--用class元素来定义一个持久化类 -->
<class name="People" table="person">
<!-- id元素定义了属性到数据库表主键字段的映射。-->
<id name="id">
<!-- 用来为该持久化类的实例生成唯一的标识 -->
<generator class="native"/>
</id>
<!-- discriminator识别器 是一种定义继承关系的映射方法-->
<discriminator column="subclass" type="character"/>
<!-- property元素为类声明了一个持久化的,JavaBean风格的属性-->
<property name="name" type="string">
<column name="name" length="64" not-null="true" />
</property>

<property name="sex"
not-null="true"
update="false"/>
<!--多对一映射关系-->
<many-to-one name="friend"
column="friend_id"
update="false"/>
<!--设置关联关系-->
<set name="friends" inverse="true" order-by="id">
<key column="friend_id"/>
<!―一对多映射-->
<one-to-many class="Cat"/>
</set>
</class>
</hibernate-mapping>
  组件应用的方法
 

 组件有两种类型,即组件(component)和动态组件(dynamic-component)。在配置文件中,component元素为子对象的元
素与父类对应表的字段建立起映射关系。然后组件可以声明它们自己的属性、组件或者集合。component元素的定义如下所示:

<component name="propertyName" class="className" insert="true|false"
upate="true|false" access="field|property|ClassName">
<property ...../>
<many-to-one .... />
........
</component>
  在这段代码中,name是指属性名,class是类的名字,insert指的是被映射的字段是否出现在SQL的INSERT语句中,upate指出被映射的字段是否出现在SQL的UPDATE语句中,access指出访问属性的策略。

  Hiebernate的基本配置
 
 Hibernate的数据库连接信息是从配置文件中加载的。
Hibernate的配置文件有两种形式:一种是XML格式的文件,一种是properties属性文件。properties形式的配置文件默认文件名
是hibernate.properties,一个properties形式的配置文件内容如下所示:

#指定数据库使用的驱动类
hibernate.connection.driver_class = com.mysql.jdbc.Driver r
#指定数据库连接串
hibernate.connection.url = jdbc:mysql://localhost:3306/db
#指定数据库连接的用户名
hibernate.connection.username = user
#指定数据库连接的密码
hibernate.connection.password = password
#指定数据库使用的方言
hibernate.dialect = net.sf.hibernate.dialect.MySQLDialect
#指定是否打印SQL语句
hibernate.show_sql=true
  在配置文件中包含了一系列属性的配置,Hibernate将根据这些属性来连接数据库。
  在XML格式的配置文件中,除了基本的Hibernate配置信息,还可以指定具体的持久化类的映射文件,这可以避免将持久化类的配置文件硬编码在程序中。XML格式的配置文件的默认文件名为hibernate.cfg.xml,一个XML配置文件的示例如下所示:

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!--显示执行的SQL语句-->
<property name="show_sql">true</property>
<!--连接字符串-->
<property name="connection.url">jdbc:mysql://localhost:3306/STU</property>
<!--连接数据库的用户名-->
<property name="connection.username">root</property>
<!--数据库用户密码-->
<property name="connection.password">root</property>
<!--数据库驱动-->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!--选择使用的方言-->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!--映射文件 -->
<mapping resource="com/stuman/domain/Admin.hbm.xml" />
<!--映射文件-->
<mapping resource="com/stuman/domain/Student.hbm.xml" />
</session-factory>
</hibernate-configuration>
  properties形式的配置文件和XML格式的配置文件可以同时使用。当同时使用两种类型的配置文件时,XML配置文件中的设置会覆盖properties配置文件的相同的属性。
  对象标识符号
 
 在关系数据库表中,主键(Primary
Key)用来识别记录,并保证每条记录的唯一性。在Java语言中,通过比较两个变量所引用对象的内存地址是否相同,或者比较两个变量引用的对象值是否相

同来判断两对象是否相等。Hibernate为了解决两者之间的不同,使用对象标识符(OID)来标识对象的唯一性。OID是关系数据库中主键在Java

对象模型中的等价物。在运行时,Hibernate根据OID来维持Java对象和数据库表中记录的对应关系。如下代码所示,三次调用了Session的
load()方法,分别加载OID为1或3的User对象。

Transaction tx = session.beginTransaction();
User user1 = (User)session.load(User.class,new Long(1));
User user2 = (User)session.load(User.class,new Long(1));
User user3 = (User)session.load(User.class,new Long(3));
System.out.println( user1 == user2 );
System.out.println( user1 == user3 );
 
 应用程序在执行上述代码时,第一次加载OID为1的User对象,从数据库中查找ID为1的记录,然后创建相应的User实例,并把它保存在
Session缓存中,最后将该实例的引用赋值给变量user1。第二次加载OID为1的对象时,直接把Session缓存中OID为1的实例的引用赋值
给变量user2。因此,表达式user1==user2的结果为true。
  标识的生成可以使用不同的策略,表1为Hibernate内置的标识生成策略。
  表1 Hibernate标识生成策略

标识符生成器

描述

increment

适用于代理主键。由Hibernate自动以递增方式生成。

identity

适用于代理主键。由底层数据库生成标识符。

sequence

适用于代理主键。Hibernate根据底层数据库的序列生成标识符,这要求底层数据库支持序列。

hilo

适用于代理主键。Hibernate分局high/low算法生成标识符。

seqhilo

适用于代理主键。使用一个高/低位算法来高效的生成long,short或者int类型的标识符。

native

适用于代理主键。根据底层数据库对自动生成标识符的方式,自动选择identity、sequence或hilo。

uuid.hex

适用于代理主键。Hibernate采用128位的UUID算法生成标识符。

uuid.string

适用于代理主键。UUID被编码成一个16字符长的字符串。

assigned

适用于自然主键。由Java应用程序负责生成标识符。

foreign

适用于代理主键。使用另外一个相关联的对象的标识符。

  Hibernate映射类型
  在对象/关系映射文件中,Hibernate采用映射类型作为Java类型和SQL类型的桥梁。Hibernate映射类型分为2种:内置映射类型和自定义映射类型。
  1、内置映射类型
  Hibernate对所有的Java原生类型、常用的Java类型如String、Date等都定义了内置的映射类型。表2列出了Hibernate映射类型、对应的Java类型以及对应的标准SQL类型。
  表2 Hibernate内置映射类型

Hibernate映射类型

Java类型

标准SQL类型

大小

integer/int

java.lang.Integer/int

INTEGER

4字节

long

java.lang.Long/long

BIGINT

8字节

short

java.lang.Short/short

SMALLINT

2字节

byte

java.lang.Byte/byte

TINYINT

1字节

float

java.lang.Float/float

FLOAT

4字节

double

java.lang.Double/double

DOUBLE

8字节

big_decimal

java.math.BigDecimal

NUMERIC

character

java.lang.Character/java.lang.String/char

CHAR(1)

定长字符

string

java.lang.String

VARCHAR

变长字符

boolean/ yes_no/true_false

java.lang.Boolean/Boolean

BIT

布尔类型

date

java.util.Date/java.sql.Date

DATE

日期

timestamp

java.util.Date/java.util.Timestamp

TIMESTAMP

日期

calendar

java.util.Calendar

TIMESTAMP

日期

calendar_date

java.util.Calendar

DATE

日期

binary

byte[]

BLOB

BLOB

text

java.lang.String

TEXT

CLOB

serializable

实现java.io.Serializablej接口的任意Java类

BLOB

BLOB

clob

java.sql.Clob

CLOB

CLOB

blob

java.sql.Blob

BLOB

BLOB

class

java.lang.Class

VARCHAR

定长字符

locale

java.util.Locale

VARCHAR

定长字符

timezone

java.util.TimeZone

VARCHAR

定长字符

currency

java.util.Currency

VARCHAR

定长字符

  2、自定义映射类型
 
 Hibernate提供了自定义映射类型接口,允许用户以编程的方式创建自定义的映射类型。用户自定义的映射类型需要实现
net.sf.hibernate.UserType或net.sf.hibernate.CompositeUserType接口。具体的创建自定义映
射类型的方法请参考hibernate官方文档或相关资料,这里不再详细介绍。

3、连接池

c3p0连接池
       c3p0连接池是Hibernate推荐使用的连接池,若需要使用该连接池时,需要将c3p0的jar包加入到classpath中。c3p0连接池的配置示例如下:
hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
        <!-- 显示实际操作数据库时的SQL -->
        <property name="show_sql">true</property>
        <!-- SQL方言,这边设定的是MySQL -->
        <property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>
        <!--驱动程序,在后续的章节中将讲述mysql、sqlserver和Oracle数据库的配置 -->
        <property name="connection.driver_class">……</property>
        <!-- JDBC URL -->
        <property name="connection.url">……</property>
        <!-- 数据库用户名 -->
        <property name="connection.username">user</property>
        <!-- 数据库密码 -->
        <property name="connection.password">pass</property>
        <property name="c3p0.min_size">5</property>
        <property name="c3p0.max_size">20</property>
        <property name="c3p0.timeout">1800</property>
        <property name="c3p0.max_statements">50</property>
        <!-- 对象与数据库表格映像文件 -->
       <mapping resource="com/amigo/pojo/User.hbm.xml"/>
<mapping resource="com/amigo/pojo/Org.hbm.xml"/>
    </session-factory>
</hibernate-configuration>
在上述配置中,Hibernate根据配置文件生成连接,再交给c3p0管理。
3. proxool连接池
       proxool跟c3p0以及dbcp不一样,它是自己生成连接的,因此连接信息放在proxool配置文件中。使用它时,需要将proxool-0.8.3.jar加入到classespath中。配置举例如下:
hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
        <!-- 显示实际操作数据库时的SQL -->
        <property name="show_sql">true</property>
        <!-- SQL方言,这边设定的是MySQL -->
        <property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>
<!—proxool的配置 -->
       <property name="proxool.pool_alias">pool1</property>
<property name="proxool.xml">ProxoolConf.xml</property>
<property name="connection.provider_class">net.sf.hibernate.connection.ProxoolConnectionProvider</property>
       <!-- 对象与数据库表格映像文件 -->
       <mapping resource="com/amigo/pojo/User.hbm.xml"/>
<mapping resource="com/amigo/pojo/Org.hbm.xml"/>
  </session-factory>
</hibernate-configuration>
在hibernate.cfg.xml的同目录下编写proxool的配置文件:ProxoolConf.xml,该文件的配置实例如下:
ProxoolConf.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- the proxool configuration can be embedded within your own application's.
Anything outside the "proxool" tag is ignored. -->
<something-else-entirely>
<proxool>
<alias>pool1</alias>
<!--proxool只能管理由自己产生的连接-->
<!-- 驱动的url-->
<!-- jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=GBK-->
<driver-url>… </driver-url>
<!-- 驱动类,eg. com.mysql.jdbc.Driver-->
<driver-class>… </driver-class>
<driver-properties>
<!-- 数据库用户名,eg. value为root-->
<property name="user" value="…"/>
<!-- 数据库密码,eg. value为root-->
<property name="password" value="…."/>
</driver-properties>
<!-- proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁-->
<house-keeping-sleep-time>90000</house-keeping-sleep-time>
<!-- 指因未有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受-->
<maximum-new-connections>20</maximum-new-connections>
<!-- 最少保持的空闲连接数-->
<prototype-count>5</prototype-count>
<!-- 允许最大连接数,超过了这个连接,再有请求时,就排在队列中等候,最大的等待请求数由maximum-new-connections决定-->
<maximum-connection-count>100</maximum-connection-count>
<!-- 最小连接数-->
<minimum-connection-count>10</minimum-connection-count>
</proxool>
</something-else-entirely>
4. dbcp连接池
       在
hibernate3.0中,已经不再支持dbcp了,hibernate的作者在hibernate.org中,明确指出在实践中发现dbcp
有 BUG,在某些种情会产生很多空连接不能释放,所以抛弃了对dbcp的支持。若需要使用dbcp,开发人员还需要将commons-pool-
1.2.jar 和commons-dbcp-1.2.1.jar两个jar包加入到classpath中。dbcp与c3p0一样,都是由
hibernate建立连接的。
在hibernate2.0中的配置建立如下:
hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
        <!-- 显示实际操作数据库时的SQL -->
        <property name="show_sql">true</property>
        <!-- SQL方言,这边设定的是MySQL -->
        <property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>
        <!--驱动程序,在后续的章节中将讲述mysql、sqlserver和Oracle数据库的配置 -->
        <property name="connection.driver_class">……</property>
        <!-- JDBC URL -->
        <property name="connection.url">……</property>
        <!-- 数据库用户名,eg. root -->
        <property name="connection.username">…</property>
        <!-- 数据库密码, eg. root-->
        <property name="connection.password">…</property>
       <property name="dbcp.maxActive">100</property>
<property name="dbcp.whenExhaustedAction">1</property>
<property name="dbcp.maxWait">60000</property>
<property name="dbcp.maxIdle">10</property>
<property name="dbcp.ps.maxActive">100</property>
<property name="dbcp.ps.whenExhaustedAction">1</property>
<property name="dbcp.ps.maxWait">60000</property>
<property name="dbcp.ps.maxIdle">10</property>
        <!-- 对象与数据库表格映像文件 -->
       <mapping resource="com/amigo/pojo/User.hbm.xml"/>
<mapping resource="com/amigo/pojo/Org.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

hibernate.cfg.xml 配置(摘录)的更多相关文章

  1. hibernate.cfg.xml配置(Oracle+c3p0)

    说明:数据库:Oracle10g:连接池:c3p0 结构: 一.配置hibernate.cfg.xml <?xml version="1.0" encoding=" ...

  2. 用hibernate.properties代替hibernate.cfg.xml配置常用的属性

    我们使用hibernate时经常在hibernate.cfg.xml文件中配置数据库连接的相关属性,是否显示sql语句,数据库的方言等,这些配置其实也可以在.properties文件中配置.现在我把这 ...

  3. hibernate.cfg.xml配置

    hibernate.hbm2ddl.auto 配置: create:每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这 ...

  4. hibernate4配置文件hibernate.cfg.xml配置详解

    <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE hibernate-configurat ...

  5. Hibernate hibernate.cfg.xml配置

    数据库连接<required>: <property name="hibernate.connection.driver_class"> com.mysql ...

  6. hibernate.cfg.xml 配置SQL server,MySQL,Oracle

    1.连接SQL server <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hiberna ...

  7. hibernate4.3.5,Final hibernate.cfg.xml的配置

    今天是接触hibernate的第二天,用来练习的是hibernate最新的版本hibernate-release-4.3.5.Final 要使用hibernate,则先要引入它的jar包,要引入的ja ...

  8. spring applicationContext.xml和hibernate.cfg.xml设置

    applicationContext.xml配置 <?xml version="1.0" encoding="UTF-8"?> <beans ...

  9. hibernate.cfg.xml配置文件和hbm.xml配置文件

    http://blog.sina.com.cn/s/blog_a7b8ab2801014m0e.html hibernate.cfg.xml配置文件格式 <?xml version=" ...

随机推荐

  1. zencart安装第三步出现空白

    问题描述:在安装zencart时,在第三步同意协议,然后点击下一步时,页面经过漫长的等待后就显示空白. 解决方法:打开php.ini,将max_execution_time = 30 -> ma ...

  2. SDUST作业10 Problem J: 提取缩略词

    Description 在英文文献中,尤其是专业文献中,经常有很多的缩略词,如CPU代表Central Processing Unit等.为了方便学习,Qili决定从一批英文论文中提取出所有的缩略词以 ...

  3. Silverlight RadGridView的HeaderCellStyle样式

    效果图 <UserControl x:Class="SilverlightApplication7.MainPage" xmlns="http://schemas. ...

  4. Linux redis 配置文件

    # Redis configuration file example # Note on units: when memory size is needed, it is possible to sp ...

  5. onMeasure 出现java.lang.NullPointerException

    直接在xml中使用自定义的布局.如自定义了一个view的onMeasure方法,如果此时引用Application就容易发生NullPointExecption异常.

  6. ASP.NET MVC5学习笔记之Action参数模型绑定之模型元数据和元数据提供

    一. 元数据描述类型ModelMetadata 模型元数据是对Model的描述信息,在ASP.NET MVC框架中有非常重要的作用,在模型绑定,模型验证,模型呈现等许多地方都有它的身影.描述Model ...

  7. IoC~高效的Autofac

    http://www.cnblogs.com/lori/archive/2012/09/05/2671724.html http://www.cnblogs.com/kissdodog/p/36114 ...

  8. Python之路-(三级菜单)

    data = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村':{ '爱奇艺':{}, '汽车之家':{}, 'youk ...

  9. python内建函数-数字相关

    本篇对于数字有关的内置函数进行总结. 数字包括 int() , long() , float() , complex() ,这些函数都能够用来进行数值类型的转换.同时这些函数也接受字符串参数,返回字符 ...

  10. activiti

    http://activiti.org/designer/archived/  eclipse plugin