日期:2014-05-16  浏览次数:20401 次

用hibernate和spring整合做小例子对数据库增删改查
注意:先添加hibernate能力,再添加spring能力,最后逆向数据库

一.配置applicationContext.xml

1.

<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">


2.管理sessionFactory:(创建SessionFactory 实例)

  <bean id="sessionFactory"
  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="configLocation"
   value="classpath:hibernate.cfg.xml">
  </property>
  </bean>

SessionFactory接口

一个SessionFactory对应一个数据源,它是个重量级对象,不可随意生成多个实例。对于一般的单数据库应用来说,只需要一个SessionFactory就足够了。当然如果有多个数据库的话,还是需要为每个数据库生成对应的SessionFactory。它是线程安全的,同一个实例可以被应用中的多个线程共享。
理解:

(1)Hibernate的核心接口之一:
SessionFactory接口:SessionFactroy接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。
(2)Hibernate 的 SessionFactory,是单个数据库映射关系编译后的内存镜像,是Hibernate执行持久化访问的基础部分。大部分情况下,一个 J2EE 应用对应一个数据库。而Spring 通过ApplicationContext管理SessionFactory,无须采用单独Hiberate应用所必需的hibernate.cfg.xml文件。Spring 配置管理SessionFactory 与数据库的连接。而在实际的J2EE应用中,数据源会采用依赖注入的方式,传给 Hibernate 的 SessionFactory。具体配置如下所示:

<?xml version="1.0" encoding="gb2312"?>
<!--Spring配置文件的DTD定义--〉
<!DOCTYPE beans PUBLIC"-//SPRiNG//DTDBEAN//EN"
''http://www.springframework.org/dtd/spring-beans.dtd">
<!--Spring配置文件的根元素是beans-->
<beans>
<!--定义数据源,该bean的 ID 为 dataSource-->
<bean id="dataSource" class="org.springframework.jdbc.
datasource.DriverManagerDataSource"><!…指定数据库驱动--〉
<property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
<!--指定连接数据库的URL--〉
<property name="url"><value>jdbc:mysql://wonder:3306/
j2ee</ value></property><!--root 为数据库的用户名…〉
<property name="username"><value>root</value></property><!--pass 为数据库密码--〉
<property name="password"><value>pass</value></property></bean>
<!--定义Hibernate的 SessionFactory-->
<beanid="sessionFactory"class="org.springframework.
orm.hibernate3.LocalSessionFactoryBean">
<!-- 依赖注入数据源,注入正是上文定义的dataSource>
<property name="dataSource"><ref local="dataSource"/>
</property><! --mappingResouces属性用来列出全部映射文件〉
<property name="mappingResources"><list>
<!--以下用来列出所有的PO 映射文件-->
<value>lee/MyTest.hbm.xml</value></list></property>
<!--定义Hibernate的 SessionFactory的属性一〉
<property name="hibernateProperties"><props>
<!--指定Hibernate的连接方法一〉
<propkey="hibernate.dialect">org.hibernate.dialect.
MySQLDialect</prop>
<!-- 不同数据库连接,启动时选择create,update, create-drop-->
<prop key="hibernate.hbm2ddl.auto">update</prop></props></property></bean></beans>

(3)SessionFactory由ApplicationContext管理,并随着应用启动时自动加载,可以被处于ApplicaionContext管理的任意一个bean引用,比如DAOHibernate的数据库访问需要在Session管理下,而SessionFactory是 Session的工厂。 Spring采用依赖注入为DAO对象注入SessionFactory的引用

Spring也提供了Hibernate的简化访问方式,Spring采用模板设计模式,提供Hibernate访问与其他持久层访问的一致性。如果需要使用容器管理的数据源,则无须提供数据驱动等信息,只需要提供数据源的JNDI 即可。对上文的SessionFactory只需将dataSource的配置替换成 JNDI 数据源,并将原有的 dataSource Bean 替换成如下所示:


<!--此处配置 JNDI 数据源--〉