spring集成hibernate3

8.2.1  如何集成

       Spring通过使用如下Bean进行集成Hibernate:

  • LocalSessionFactoryBean :用于支持XML映射定义读取:

         configLocation和configLocations:用于定义Hibernate配置文件位置,一般使用如classpath:hibernate.cfg.xml形式指定;

         mappingLocations :用于指定Hibenate映射文件位置,如chapter8/hbm/user.hbm.xml;

         hibernateProperties:用于定义Hibernate属性,即Hibernate配置文件中的属性;

         dataSource:定义数据源;

hibernateProperties、dataSource用于消除Hibernate配置文件,因此如果使用configLocations指定配置文件,就不要设置这两个属性了,否则会产生重复配置。推荐使用dataSource来指定数据源,而使用hibernateProperties指定Hibernate属性。

  • AnnotationSessionFactoryBean:用于支持注解风格映射定义读取,该类继承LocalSessionFactoryBean并额外提供自动查找注解风格配置模型的能力:

         annotatedClasses:设置注解了模型类,通过注解指定映射元数据。

         packagesToScan:通过扫描指定的包获取注解模型类,而不是手工指定,如“cn.javass.**.model”将扫描cn.javass包及子包下的model包下的所有注解模型类。

接下来学习一下Spring如何集成Hibernate吧:

 

1、准备jar包:

首先准备Spring对ORM框架支持的jar包:

org.springframework.orm-3.0.5.RELEASE.jar  //提供对ORM框架集成

 

下载hibernate-distribution-3.6.0.Final包,获取如下Hibernate需要的jar包:

hibernate3.jar                       //核心包

lib\required\antlr-2.7.6.jar              //HQL解析时使用的包

lib\required\javassist-3.9.0.GA.jar       //字节码类库,类似于cglib

lib\required\commons-collections-3.1.jar  //对集合类型支持包,前边测试时已经提供过了,无需再拷贝该包了

lib\required\dom4j-1.6.1.jar            //xml解析包,用于解析配置使用

lib\required\jta-1.1.jar                 //JTA事务支持包

lib\jpa\hibernate-jpa-2.0-api-1.0.0.Final.jar //用于支持JPA

 

             

下载slf4j-1.6.1.zip(http://www.slf4j.org/download.html),slf4j是日志系统门面(Simple Logging Facade for Java),用于对各种日志框架提供给一致的日志访问接口,从而能随时替换日志框架(如log4j、java.util.logging):

 

slf4j-api-1.6.1.jar              //核心API

slf4j-log4j12-1.6.1.jar          //log4j实现

 

将这些jar包添加到类路径中。

 

2、对象模型UserModel:

package com.domain;
public class UserModel {
    public int getId() {
  return id;
 }
 public void setId(int id) {
  this.id = id;
 }
 public String getMyName() {
  return myName;
 }
 public void setMyName(String myName) {
  this.myName = myName;
 }
 private int id;
    private String myName;  
    //省略getter和setter    
}

 

3、Hibernate映射定义

<hibernate-mapping>
    <class name="com.domain.UserModel" table="t_person">
        <id name="id" column="id"><generator class="native"/></id>
        <property name="myName" column="name"/>
    </class>
</hibernate-mapping>

 

4 定义sessionFactory配置文件

<bean id="dataSource"    class="com.mchange.v2.c3p0.ComboPooledDataSource"   destroy-method="close"> 
           <property name="driverClass" value="${driverClass}"/> 
           <property name="jdbcUrl" value="${jdbcUrl}"/> 
           <property name="user" value="${user}"/> 
           <property name="password" value="${password}"/> 
           <!--initialSize: 初始化连接-->   
          <property name="initialPoolSize" value="5"/> 
  </bean>
 
  <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/> <!-- 指定数据源 -->
      <property name="mappingResources">     <!-- 指定映射定义 -->
        <list>
          <value>com/domain/user.hbm.xml</value>
        </list>
      </property>
      <property name="hibernateProperties">   <!--指定Hibernate属性 -->
        <props>
          <prop key="hibernate.dialect">
              org.hibernate.dialect.MySQLDialect
          </prop>
        </props>
      </property>
</bean>
  
   
  <bean id="userHibernateDao"  class="com.hibernate.UserHibernateDaoImpl"  >
   <property name="sessionFactory" ref="sessionFactory"></property>
  </bean>

 

5 类似于JdbcDaoSupport类,Spring对Hibernate也提供了HibernateDaoSupport类来支持一致的数据库访问。HibernateDaoSupport也是DaoSupport实现:

package com.hibernate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.dao.IUserDao;
import com.domain.UserModel;
 
public class UserHibernateDaoImpl extends HibernateDaoSupport implements IUserDao {
    private static final String COUNT_ALL_HQL = "select count(*) from UserModel";
    @Override
    public void save(UserModel model) {
        getHibernateTemplate().save(model);
    }
    @Override
    public int countAll() {
        Number count = (Number) getHibernateTemplate().find(COUNT_ALL_HQL).get(0);
        return count.intValue();
    }
 
}

 

6测试

 public void testHibernateTemplate() {
  String[] configLocations = new String[] { "classpath:applicationContext.xml" };
  ApplicationContext ctx = new ClassPathXmlApplicationContext(configLocations);
  IUserDao userDao =(IUserDao)ctx.getBean("userHibernateDao");
  UserModel model = new UserModel();
  model.setMyName("hibernate");
  userDao.save(model);
  System.out.println(userDao.countAll());
 }
   

转载【 http://sishuok.com/forum/blogPost/list/0/2497.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值