spring和hibernate框架的整合和事务管理

Spring中使用ORM的好处
– 便于测试
– 通用数据访问异常封装
– 通用的资源管理
– 完整简便的事务管理

当sping和hibernate整合的两种方式:
方法一:使用c3p0连接池的方式(事先需要导入一个jar包)
这里写图片描述

使用c3p0的目的是为了把连接池还有mapping的信息等独立出来配置到application里面,而不是写在hibernate。xml里面,换句话说就是把hibernate.xm整合到application.xml里面。

好了,那么我们先来看看没有整合hibernate。xml和application.xml文件之前配置spring的hibernate的持久化是怎么写的

application

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

hibernate.xml部分:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>

<session-factory>


    <!-- 1,数据库连接信息 -->
    <property name="dialect">
        org.hibernate.dialect.MySQL5InnoDBDialect
    </property> 

    <property    name="connection.url">jdbc:mysql:///itcastoa0720</property>
    <property  name="connection.driver_class">com.jdbc.mysql.Driver</property>
    <property name="connection.username">root</property>
    <property name="connection.password">root</property>


    <!-- 2,其他配置 -->
    <property name="show_sql">true</property>
    <property name="hbm2ddl.auto">update</property>


    <!-- 3,导入映射文件 -->
    <mapping resource="com/it/oa/domain/User.hbm.xml" />
    <mapping resource="com/it/oa/domain/Role.hbm.xml" />
    <mapping resource="com/it/oa/domain/Department.hbm.xml" />
    <mapping resource="com/it/oa/domain/Privilege.hbm.xml" />

</session-factory>

</hibernate-configuration>

下面是使用了整合了之后的application.xml

<!-- 配置连接池的信息 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <!-- 数据库连接的四个基本参数 -->
        <property name="driverClass" value="${jdbc.driver}"/>
        <property name="jdbcUrl" value="${jdbc.url}"/>
        <property name="user" value="${jdbc.user}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>

    <!-- 配置Hibernate的相关属性 -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <!-- 注入连接池 -->
        <property name="dataSource" ref="dataSource"/>
        <!-- 配置Hibernate的其他的属性 -->
        <property name="hibernateProperties">
        <props>
                <!-- Hibernate的方言 -->
        <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
        <prop key="hibernate.show_sql">true</prop>
        <prop key="hibernate.format_sql">true</prop>
        <prop key="hibernate.hbm2ddl.auto">update</prop>
        <prop key="hibernate.connection.autocommit">false</prop>
        </props>
        </property>
        <!-- 配置映射文件 -->
        <property name="mappingResources">
        <list>
<value>cn/i/shop/user/User.hbm.xml</value>
                <value>cn/it/shop/category/Category.hbm.xml</value>
                <value>cn/it/shop/product/Product.hbm.xml</value>
                <value>cn/it/shop/categorysecond/CategorySecond.hbm.xml</value>
                <value>cn/it/shop/order/Order.hbm.xml</value>
                <value>cn/it/shop/order/OrderItem.hbm.xml</value>
                <value>cn/it/shop/adminuser/AdminUser.hbm.xml</value>
            </list>
        </property>

    </bean>

纤细说明:
直接在Bean中配置Hiberate的属性

<bean id=“sessioinFactory”
class=“ort.springframework.orm.hibernate.LocalsessionFactoryBea
n”>
<property name="mappingResources">
<list>
<value>product.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.hbm2ddl.auto"> update </prop>
<prop key="hibernate.show_sql">false </prop>
</props>
</property>
</bean>

在一个实体类里面怎么通过spring注入sessionfactory呢
下面我们来尝试一下:

在Spring中访问Hibernate的方法

现在application.xml里面配置一下信息

<bean id="articleHibernateDao" class="com.sc.UserDaoHibernateImpl">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

方式一:继承父类

class UserDaoHibernateImpl extends HibernateDaoSupport{
public User getUser(long id) {
return getHibernateTemplate().get(User.class, id);
}
}

(解释:
(1)Spring提供的DAO(数据访问对象)支持目的是便
于以一致的方式使用不同的数据访问技术, 如
JDBC,Hibernate或者JDO等。

(2)HibernateDaoSupport - Hibernate数据访问对象的基类。
需要一个SessionFactory,同时为子类提供
HibernateTemplate。也可以选择直接通过 提供一个
HibernateTemplate来初始化,那个就要在对象中继承父类HibernateDaoSupport,然后通过this.getHibernateTemplate()得到一个session
(3)我们再来看看抽象父类HibernateDaoSupport的源码
这里写图片描述

方式二:传统的依赖注入方法

class UserDaoHibernateImpl {
@Resource
private SessionFactory sessionFactory;
//不用注解的方式就要实现 sessionFactory的get,set方法
public User getUser(long id) {

return sessionFactory.getCurrentSession().get(User.class, id);
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值