十八、Spring整合Hibernate

Spring整合Hibernate

1.Spring提供的DAO支持

(1)DAO模式是一种标准的JavaEE设计模式,DAO模式的核心思想是,所有数据库访问都通过DAO组件完成,DAO组件封装了数据库的增、删、改等原子操作。业务逻辑组件依赖于DAO组件提供的书苦苦原子操作,完成系统业务逻辑的实现;

(2)JavaEE应用大致上可分为如下三层:

  1)表现层

  2)业务逻辑层

  3)数据持久层

(3)轻量级JavaEE应用架构:

 

2.管理Hibernate的SessionFactory

(1)Spring的IoC提供用声明式的方式管理SessionFactory,还能为SessionFactory注入数据源引用;

(2)一旦在Spring的IoC容器中配置了SessionFactory Bean,它将随应用的启动而加载,并可以利用IoC容器的功能,将SessionFactory注入任何Bean中,比如DAO组件。一旦DAO组件获得了SessionFactory Bean的引用,它就可以完成实际的数据库访问;

(3)配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-4.0.xsd"
    >
    <!-- 定义数据源Bean,使用C3P0数据源实现,并注入数据源的必要信息 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
        destroy-method="close"
        p:driverClass="com.mysql.jdbc.Driver"
        p:jdbcUrl="jdbc:mysql://localhost/test"
        p:user="root"
        p:password="stx12345"
        p:maxPoolSize="40"
        p:minPoolSize="2"
        p:initialPoolSize="20"
        p:maxIdleTime="30"
    />
    
    <!-- 定义Hibernate的SessionFactory,SessionFactory需要依赖数据源,注入dataSource -->
    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"
        p:dataSource-ref="dataSource"
    >
        <!-- annotatedClasses用来列出所有的持久化类 -->
<!--      <property name="annotatedClasses">    -->
<!--         <list>                            -->
                <!-- 以下用来列出所有的PO类 -->    
<!--              <value></value>                -->
<!--         </list>                            -->
<!--     </property>                            -->
        <!-- 定义SessionFactory的属性 -->
        <property name="hibernateProperties">
            <props>
                <!-- 指定Hibernate的数据库连接方言 -->
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
                <!-- 显示hibernate持久化操作生成的SQL -->
                <prop key="show_sql">true</prop>
                <!-- 将SQL脚本格式化后再输出 -->
                <prop key="hibernate.format_sql">true</prop>
                <!-- 根据需要自动创建数据表 -->
                <prop key="hibernate.hbm2ddl.auto">update</prop>
            </props>
        </property>
    </bean>
        
</beans>

 

3.实现DAO组件的基类

(1)使用Spring管理SessionFactory后就可以将SessionFactory注入应用的DAO组件中,Spring推荐使用SessionFactory的getCurrentSession()方法获取Hibernate Session,其余的持久化操作与直接使用Hiberntate持久化操作的代码基本相同;

(2)为了简化应用中各DAO组件的设计,程序考虑将所有的DAO组件都需要提供的方法提取出来,由一个BaseDap来实现,这样应用中的其他DAO组件只要继承BaseDao即可;

(3)通常来说所有的DAO组件都应该提供如下方法:

  1)根据ID加载持久化实体;

  2)保存持久化实体;

  3)更新持久化实体;

  4)删除持久化实体,以及根据ID删除持久化实体;

  5)获取所有的持久化实体;

  6)其他一些查询方法;

(4)BaseDao接口代码:

import java.io.Serializable;
import java.util.List;

public interface BaseDao<T> {
    //根据ID加载实体
    T get(Class<T> entityClazz,Serializable id);
    //保存实体
    Serializable save(T entity);
    //更新实体
    void update(T entity);
    //删除实体
    void delete(T entity);
    //根据ID删除实体
    void delete(T entity,Serializable id);
    //获取所有实体
    List<T> findAll(Class<T> entityClazz);
    //获取实体总数
    long findCount(Class<T> enetityClazz);
}

 

(5)BaseDao实现类:BaseDaoImpl

4.传统的HibernateTemplate和HibernateDaoSupport

5.实现Dao组件

6.使用IoC容器组装各种组件

7.使用声明式事务

posted @ 2017-08-03 16:59  丶theDawn  阅读(117)  评论(0编辑  收藏  举报