Spring 独立式整合&引入式整合

**

整合说明:

**
1、独立式整合指的是三个框架都使用自己的配置文件。
2、引入式整合指的是hibernate主配置文件中的内容都配置到Spring配置文件中

基于XML的独立式整合:

整合Spring和hibernate框架:

1、HibernateTemplate
Spring针对hibernate在dao层的操作进行了封装,封装后生成的对象是HibernateTemplate
Spring为dao层提供了一个类HibernateDaoSupport,HibernateDaoSupport中封装了HibernateTemplate对象
可以采用继承HibernateDaoSupport的方法编写dao层,这样可以直接再类中调用this.getHibernateTemplate方法获取HibernateTemplate对象。

注:采用注解开发时不可用继承编写dao的方法,原因是无法注入HibernateTemplate属性(注解开发时,Autowired注解无法标注到HibernateTemplate属性上,HibernateTemplate在父类中)

代码示例:

public class CustomerDaoImpl extends HibernateDaoSupport implements CustomerDao {
    @Override
    public List<Customer> findAllCustomer() {
            //调用了getHibernateTemplate()方法
        List<Customer> list = (List<Customer>) this.getHibernateTemplate().find("from Customer");
        return list;
<!-- 配置dao -->
<bean id="customerDao" class="com.csdn.dao.impl.CustomerDaoImpl">
    <property name="sessionFactory" ref="sessionFactory"></property>
</bean>

使用注解开发时,需要在类中提供一个私有的HibernateTemplate对象,用来在XML中注入对象。

public class CustomerDaoImpl implements CustomerDao {
    @Autowired
    private HibernateTemplate hibernateTemplate;
<bean id="HibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">
            <property name="sessionFactory" ref="sessionFactory"></property>
</bean> 

2、SessionFactory

泛指hibernate主配置文件中的内容,可以把它当做连接池数据源dataSource

<!-- 配置SessionFactory -->
<bean id="sessionFactory" 
            class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<!-- 使用的是hibernate主配置文件中的内容,我们只需要指定hibernate主配置文件的所在位置 -->
    <property name="configLocation" value="classpath:hibernate.cfg.xml"/>
</bean>

注:在Spring与Hibernate整合时,hibernate应取消session对当前线程的绑定,不然dao层任何操作都会报错。因为Spring的HibernateTemplate对象在使用session时,Spring创建了session的代理对象,在这个过程中,Spring对hibernate绑定session到当前线程的配置不认识了,再取session时会又创建新的session,在关闭时不知道该关谁,所以运行失败。


整合Spring和Struts2框架:

Spring整合struts2框架就是让spring接管action的创建。
action是多例的,配置到spring中需要设置scope属性为多例。

struts2-spring-plugin-2.3.24.jar
可以让action类按名称自动注入属性。

struts2-spring-plugin-2.3.24.jar
在spring配置文件中配置Action,在struts2配置文件action标签的class属性里写bean的id。

Spring容器处理:

由于动作类是多例的,每次都会创建容器,导致资源的浪费。一个应用应该只有一个容器
Spring框架为我们提供了一个监听器:ContextLoaderListener。
它是ServletContextListener接口的实现类,负责监听ServletContext对象的创建,为我们创建容器,监听ServletContext对象的销毁,销毁容器。

基于XML引入式整合:

引入式整合就是把hibernate.cfg.xml中的配置都挪到spring的配置文件中。

<!-- 配置数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
    <property name="jdbcUrl" value="jdbc:mysql:///crm"></property>
    <property name="user" value="root"></property>
    <property name="password" value="root"></property>
</bean>
<!-- 配置SessionFactory -->
<bean id="sessionFactory" 
        class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <!-- 1、连接数据库的信息 -->
        <property name="dataSource" ref="dataSource"></property>
        <!-- 2、hibernate的基本配置 -->
        <property name="hibernateProperties">
            <props>
                <!-- 数据库的方言-->
                <prop key="hibernate.dialect">
                        org.hibernate.dialect.MySQLDialect
                </prop>
                <!-- 是否显示sql语句-->
                <prop key="hibernate.show_sql">true</prop>
                <!-- 是否格式化sql语句-->
                <prop key="hibernate.format_sql">false</prop>
                <!-- 采用何种方式生成数据库表结构 -->
                <prop key="hibernate.hbm2ddl.auto">update</prop>
                <!-- 是spring把sesion绑定到当前线程上的配置 -->
                <prop key="hibernate.current_session_context_class">
                    org.springframework.orm.hibernate5.SpringSessionContext
                </prop>
            </props>
        </property>
        <!-- 3、映射文件的位置 
            mappingResources:配置映射文件的位置,需要写映射文件名称。
                              并且有几个映射文件,就要写几个<value></value>。
            mappingLocations:配置映射文件的位置,需要写映射文件名称。可以使用通配符。
            mappingDirectoryLocations:配置映射文件的位置,直接写到包的目录即可。
        -->
        <property name="mappingLocations">
            <array>
                <value>classpath:com/xxxx/domain/*.hbm.xml</value>
            </array>
        </property>
    </bean>

当hibernate的持久化类是用注解处理的时候:

<!-- 映射文件的位置 -->
        <property name="packagesToScan">
            <array>
                <value>cn.xxxx.domain</value>
            </array>
        </property>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值