一、简介:
介绍Hibernate之前,先简单的介绍一下ORM 映射。ORM是对象关系映射(Object Relational Mapping)的简称,是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。它完成了面向对象的编程语言到关系型数据库的映射。ORM框架可以看成应用程序和数据库之间的桥梁,通过它,我们可以以面向对象的方式建模、操作,易用、易理解,同时也可以利用关系型数据库系统对数据库访问操作的一些优势。以面向对象的方式操作持久化对象,而ORM框架负责转换成对应的SQL(结构化查询语言)操作。
Hibernate是轻量级Java EE应用的持久层解决方案,是流行的ORM框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以面向对象的方式来操纵数据库。Hibernate不仅管理Java类到数据库表的映射,还提供数据查询和获取数据的操作,可以减少人工使用SQL和JDBC处理数据的时间。
二、配置过程
1、引入jar包:
antlr-2.7.6.jar (生成SQL语句)
asm.jar(字节码增强工具类)
c3p0-0.9.1.jar(数据源连接池组件)
cglib-2.1.3.jar(代理组件,基于继承的)
commons-collections-2.1.1.jar(集合工具类组件,会进行高效的操作)
commons-logging-1.0.4.jar(日志输出的转换组件)
log4j-1.2.11.jar(日志输出组件,更加详细和可以控制输出格式,及目的地)
dom4j-1.6.1.jar(XML解析)
ehcache-1.2.3.jar(缓存组件)
ejb3-persistence.jar(持久化操作的规范jar包)
hibernate3.jar(框架的核心jar包)
jta.jar(全局的事务管理)
junit-3.8.1.jar (单元测试)
mysql-connector-java-3.1.13-bin.jar (MySQL数据库驱动jar包)
2、配置文件:
配置使用没有Hibernate的核心配置文件的方式整合;
配置映射文件;
三、Spring整合Hibernate
Spring提供了DAO支持,能与大部分ORM框架良好的整合,DA0组件是应用0的持久层访问的重要组件。
通过Bibernate进行数据持久层操作时,Hibernate的Session接口提供了基本的数据访问方法,获得Hibernate Session对象方法是要实现Hibernate的SessionFactory接口,SessionFactory接口极为重要,它是单个数据库映射关系编译后的内存镜像,负责打开、关闭和管理Session。Hibernate访问时,需要手动创建SessionFactory实例,这是繁琐的工作,我们希望能以声明式的方式管理SessionFactory实例。Spring的loc容器提供了这种方式,通过配置文件的配置管理SessionFactory实例,使用Spring管理Session对象,使用Spring实现声明式的事务管理。
下面是Spring对Hibernate的整合时的关键步骤。
2.1 建立数据库连接:
在Spring的配置文件ApplicationContext.xml中配置Hibernate对SessionFactory的设置。如下面的示例代码。
2.2 C3P0连接池:
<!--配置连接池: --> <!--引入外部属性文件 --> <context:property-placeholderlocation="classpath:jdbc.properties"/> <!--配置C3P0连接池 --> <beanid="dataSource"class="com.mchange.v2.c3p0.ComboPooledDataSource"> <propertyname="driverClass" value="${jdbc.driver}"/> <propertyname="jdbcUrl" value="${jdbc.url}"/> <propertyname="user" value="${jdbc.user}"/> <propertyname="password" value="${jdbc.password}"/> </bean>
2.3 Hibernate的相关信息
<beanid="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <!--注入连接池 --> <propertyname="dataSource" ref="dataSource"/> <!--配置@Hibernate的其他的属性 --> <propertyname="hibernateProperties"> <props> <propkey="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <propkey="hibernate.show_sql">true</prop> <propkey="hibernate.format_sql">true</prop> <propkey="hibernate.connection.autocommit">false</prop> <propkey="hibernate.hbm2ddl.auto">update</prop> </props> </property> <!--配置@Hibernate的映射文件 --> <propertyname="mappingResources"> <list> <value>cn/itcast/shop/user/vo/User.hbm.xml</value> <value>cn/itcast/shop/category/vo/Category.hbm.xml</value> <value>cn/itcast/shop/product/vo/Product.hbm.xml</value> <value>cn/itcast/shop/categorysecond/vo/CategorySecond.hbm.xml</value> <value>cn/itcast/shop/order/vo/Order.hbm.xml</value> <value>cn/itcast/shop/order/vo/OrderItem.hbm.xml</value> <value>cn/itcast/shop/adminuser/vo/AdminUser.hbm.xml</value> </list> </property> </bean>
2.4 事务管理:
2.4.1 当Spring的IoC容器配置了SessionFactory Bean,它随应用的部署启动而加载,可以利用Spring依赖注入特性将该Bean注入其它Bean。我们由配置文件还可以看出,以声明式的方式管理SessionFactory时,可以让应用在不同数据源间切换,一旦持久层服务发生改变,程序代码不需要改动,只需修改配置文件即可,使得系统的可维护性加强。
2.4.2 使用Spring中的HibernateDaosupport和HibernateTemplate类简化Hibernate DAO实现类的编写,完成数据持久化的操作。
2.4.3 通过Spring的事务机制进行统一的事务管理。Spring可以采用编程式和声明式两类事务管理。声明式的事务管理更灵活。可以在Spring中使用注解式的声明式事务管理:
<!--事务管理: --> <!--事务管理器 --> <beanid="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <propertyname="sessionFactory" ref="sessionFactory"/> </bean> <!--开启注解事务 --> <tx:annotation-driventransaction-manager="transactionManager"/>