hibernate.cfg.xml配置详解

配置文件中映射元素详解

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

 

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

 

  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根据配置文件生成连接,再交给c3p0管理。
 proxool连接池
       proxool跟c3p0以及dbcp不一样,它是自己生成连接的,因此连接信息放在proxool配置文件中。使用它时,需要将proxool-0.8.3.jar加入到classespath中。配置举例如下:
hibernate.cfg.xml

在hibernate.cfg.xml的同目录下编写proxool的配置文件:ProxoolConf.xml,该文件的配置实例如下:
ProxoolConf.xml

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
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值