Spring:Spring整合Hibernate

79 篇文章 1 订阅

1.    与Hibernate3整合

整合的目的:1,管理sessionFactory  2,利用声明式事务管理

1.1. 分别添加Hibernate3与Spring的开发环境

略。

1.2. 在Spring中配置SessionFactory

<!-- 配置SessionFactory-->

<beanid="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

    <propertyname="configLocation"value="classpath:hibernate.cfg.xml"/>

    <propertyname="dataSource">

       <beanclass="com.mchange.v2.c3p0.ComboPooledDataSource">

           <!--数据库连接信息 -->

           <propertyname="jdbcUrl"value="${jdbcUrl}"></property>

           <propertyname="driverClass"value="${driverClass}"></property>

           <propertyname="user"value="${username}"></property>

           <propertyname="password"value="${password}"></property>

           <!--其他配置信息 -->

           <propertyname="initialPoolSize"value="3"></property>

           <propertyname="maxPoolSize"value="5"></property>

           <propertyname="minPoolSize"value="3"></property>

           <propertyname="acquireIncrement"value="2"></property>

           <propertyname="maxIdleTime"value="20"></property>

       </bean>

    </property>

</bean>

1.3. 在Spring中配置声明式事务管理

 

<!-- 自动扫描与装配bean -->

<context:component-scanbase-package="cn.itcast"></context:component-scan>

 

<!-- 配置Hibernate用的事务管理器,需要注入SessionFactory对象 -->

<beanid="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager">

    <propertyname="sessionFactory"ref="sessionFactory"></property>

</bean>

 

<!-- 采用基于注解的方式配置事务 -->

<tx:annotation-driventransaction-manager="transactionManager"/>

1.4. 在DaoImpl中使用Hibernate做数据库操作并配置事务

1.4.1.    方法一:使用HibernateTemplate

1.4.1.1. 配置HibernateTemplate

<!-- 配置HibernateTemplate-->

<beanid="hibernateTemplate"class="org.springframework.orm.hibernate3.HibernateTemplate">

    <propertyname="sessionFactory"ref="sessionFactory"></property>

</bean>

1.4.1.2. 使用HibernateTemplate做增删改查操作

1.4.2.    方法二:使用注入的SessionFactory(推荐)

// 在类上声明@Transactional注解,表示所有public方法都需要事务

@Transactional

@Repository("userDao")

publicclass UserDaoImplimplements UserDao {

 

    //注入sessionFactory

    @Resource

    private SessionFactorysessionFactory;

 

    //一定要使用SessionFactory.getCurrentSession()才可以

    publicvoid save(User user) {

       sessionFactory.getCurrentSession().save(user);

    }

 

    //一定要使用SessionFactory.getCurrentSession()才可以

    publicvoid delete(Long id) {

       Object obj = getSession().get(User.class, id);

       getSession().delete(obj);

    }

 

    //一定要使用SessionFactory.getCurrentSession()才可以

    //在方法上也定义了@Transactional,设为只读的事务

    @Transactional(readOnly =true)

    public User getById(Long id) {

       return (User) getSession().get(User.class, id);

    }

}

这种方式不依赖Spring的API,所以推荐使用。


所用的Session要是sessionFactory.getCurrentSession()得到的。(线程范围内的session,保证事务用的也是这个session)

懒加载问题可以使用OpensessionInViewFilter过滤器完成(延长session的生命至JSP页面解析)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值