Hibernate的简介及使用规则
- Hibernate的简介
Hibernate是一个开放源代码的O/R Mapping (对象关系映射框架),它对JDBC进行了轻量级的对象封装,使Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 - Hibernate的持久层解决方案
为了企业应用与后端数据库频繁交互,并且使得交互更加有效而迅捷,企业应用开发者在应用和数据库之间创建了一个“持久层”。这个数据库负责存储从应用到数据库的数据,也负责数据的检索、更新和删除。在基于J2EE的企业应用中,组成这个持久层的Java类既可以映射对象到数据,也可以映射数据到对象。持久层建立是简单的,但是,这种关系常常难于建立,因为对象或者下层的数据库结构复杂,很难做到把关系表记录完整的映射到持久对象的关系上来,这主要体现在多表的关系无法直接映射到对持久对象的映射上来,可能是一个表映射多个持久对象,有可能是多个表映射一个持久对象,更有可能的是表的某些字段映射到一个持久对象,另外一些字段映射到别的持久对象上。Hibernate 是一个开源对象/与持久性和查询相关的框架,Hibernate 帮助基于普通的Java对象模型的持久对象的创建,从而允许持久对象拥有复杂的结构如混合类型、集合和属性,还可以拥有用户自定义的类型。现在这些持久对象可以有效的反映出底层数据库模式的复杂结构。为了提高效率,Hibernate包括了一些策略,如与数据库交互时的多重最优化,包括对象的缓存、有效外部连接的获取、必要时SQL语句的执行。 - 安装Hibernate
- 下载Hibernate源代码版本,可从以下网址下载:
http://prdownloads.sourceforge.net/hibernate/?sort_by=date&sort=desc - 解压到你想要放的目录,(最好不要是应用程序开发目录下,因为hibernate的功能都在它提供的jar包里,如果将源文件都放到一起,势必造成代码混乱)
- 将hibernate2.jar和lib目录下的第三方提供的jar包放到你要开发的应用程序的lib目录下
- 下载Hibernate源代码版本,可从以下网址下载:
- 配置Hibernate
简要介绍一下Hibernate的各个配置属性,具体请参考Hibernate中文手册。- Hibernate配置文件可以有两种格式,一种是hibernate.properties,另一种是hibernate.cfg.xml。后者稍微方便一些,当增加hbm映射文件的时候,可以直接在hibernate.cfg.xml里面增加,不必像hibernate.properties必须在初始化代码中加入。针对不同的应用,Hibernate配置文件的存放位置也不相同,如果是WEB应用,则将配置文件放到WEB-INF/classeses/目录下;如果是JRE环境下,则将配置文件放到根目录下。
- Hibernate配置属性的简要的说明(在hibernate.properties里有模版,可修改操作)
- hibernate.query.substitutions true 1, false 0, yes 'Y', no 'N'
这个配置意思是当你在Hibernate里面输入true的时候,Hibernate会转化为0插入数据库,当你在Hibernate里面输入false的时候,Hibernate会转化为1插入数据库,后面的Y,N同理 - 数据库操作的有关属性,以MySql为例进行说明
hibernate.dialect net.sf.hibernate.dialect.MySQLDialect
hibernate.connection.driver_class org.gjt.mm.mysql.Driver
hibernate.connection.driver_class com.mysql.jdbc.Driver
hibernate.connection.url jdbc:mysql:///test
hibernate.connection.username root
hibernate.connection.password
hibernate.dialect针对不同的数据库声明不同的Hibernate方言的类名,可以让Hibernate使用某些特定数据库平台的特性。
hibernate.connection.driver_class是JDBC的驱动
hibernate.connection.url是JDBC的URL
hibernate.connection.username数据库用户名
hibernate.connection.password数据库用户密码 - hibernate.connection.pool_size 1和hibernate.statement_cache.size 25
这是Hibernate自带的连接池的配置参数,在默认情况下将采用。Hibernate这个连接池是非常原始非常简单的连接池,如果你在项目中用Hibernate的话,建议首选App Server的连接池,次选Hibernate带的DBCP连接池。自带的连接池应该做为末选。 - hibernate.show_sql true
是否将Hibernate发送给数据库的sql显示出来,当你在调试Hibernate的时候,让Hibernate打印sql语句,可以帮助你迅速解决问题。 - hibernate.connection.isolation 4
指定数据库的隔离级别,往往不同的数据库有自己定义的隔离级别,未必是Hibernate的设置所能更改的,所以也不必去管它了。 - hibernate.jdbc.fetch_size 50 和hibernate.jdbc.batch_size 25
Fetch Size 是设定JDBC的Statement读取数据的时候每次从数据库中取出的记录条数。Fetch Size设的越大,读数据库的次数越少,速度越快;Fetch Size越小,读数据库的次数越多,速度越慢。不过并不是所有的数据库都支持Fetch Size特性,例如MySQL就不支持。
Batch Size是设定对数据库进行批量删除,批量更新和批量插入的时候的批次大小,有点相当于设置Buffer缓冲区大小的意思。Batch Size越大,批量操作的向数据库发送sql的次数越少,速度就越快。 - hibernate.jdbc.use_scrollable_resultset true
设定是否可以使用JDBC2.0规范的可滚动结果集,这对Hibernate的分页显示有一定的作用,默认就可以了。 - hibernate.cglib.use_reflection_optimizer false
默认打开,启用cglib反射优化。cglib是用来在Hibernate中动态生成PO字节码的,打开优化可以加快字节码构造的速度。 - hibernate.transaction.factory_class net.sf.hibernate.transaction.JTATransactionFactory
hibernate.transaction.factory_class net.sf.hibernate.transaction.JDBCTransactionFactory
Hibernate是对JDBC的轻量级对象封装,Hibernate本身是不具备Transaction处理功能的,Hibernate的Transaction实际上是底层的JDBC Transaction的封装,或者是JTA Transaction的封装。如果你什么都不配置,默认情况下使用JDBCTransaction。
- hibernate.query.substitutions true 1, false 0, yes 'Y', no 'N'
- 备注
这里只是介绍了一些常用的Hibernate属性,关于其它方面的属性配置,请参阅"HIBERNATE中文参考手册",在我的链接中有Hibernate的中文网站和Hibernate的官方网站。