一、ssh原始整合方式

不需要任何整合包,就是简单的将三个框架集合到一起

hibernate
        导入jar包:
            hibernate-release-5.0.7.Final\lib\required\*.jar
            日志:slf4j+log4j
            驱动:mysql-connector.jar
            数据源:hibernate-release-5.0.7.Final\lib\optional\c3p0\*.jar
        配置文件:
            hibernate.cfg.xml
            XXX.hbm.xml
    
    struts2
        导入jar包:
            struts-2.3.24\apps\struts2-blank\WEB-INF\lib\*.jar
        配置文件:
            web.xml
            struts.xml
 
    spring
        导入jar包:
            4个基本:beans、context、core、expression
            2个日志:logging、log4j
            4个aop:aop、aspects、aop联盟、aspectj织入
            2个事务相关:jdbc、tx
        配置文件:
            applicationContext.xml
            
    其他
        导入jar包:
            jstl
        配置文件:
            log4j.properties
            jdbc.properties
            
    注意:
        删除冲突jar:avassist-3.11.0.GA.jar
           
    分析原始整合方式的缺点:
        1、dao层的操作实体的代码繁琐:使用Spring提供HibernateTemplate(spring集成hibernate)

  dao中的代码

 ... ...
Session session = HibernateUtils.getSession();
Transaction transaction = session.beginTransaction();
Query query = session.createQuery("from Customer");
List<Customer> customerList = query.list();
transaction.commit();
session.close();
... ...

2、事务应该业务层控制:声明式事务控制
        3、web层 spring的配置文件加载多次 spring对象创建多次:spring集成web

  Action中的代码

 ... ....
ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml"); ... ...

4、web层中的service的获取方式 像service使用dao的方式一样(注入):struts2集成spring
... ...

CustomerService customerService = (CustomerService) app.getBean("customerService");

... ....  
    
二、ssh的xml整合方式
    1、spring集成hibernate
        导入spring集成hibernate的整合包:spring-orm.jar
        
        <!-- 加载jdbc.properties文件 -->
        <context:property-placeholder location="classpath:jdbc.properties"/>

<!-- 配置数据源对象 -->
        <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="driverClass" value="${jdbc.driver}"></property>
            <property name="jdbcUrl" value="${jdbc.url}"></property>
            <property name="user" value="${jdbc.username}"></property>
            <property name="password" value="${jdbc.password}"></property>
        </bean>

<!-- spring集成hibernate的方式1:保留hibernate.cfg.xml文件
                配置sessionFactory
                加载hibernate的配置文件 创建sessionFactory对象
                
                <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
                    <property name="configLocations">
                        <list>
                            <value>classpath:hibernate.cfg.xml</value>
                        </list>
                    </property>
                </bean>
        -->
        
        
        <!-- spring集成hibernate的方式2:摒弃hibernate.cfg.xml文件
                配置sessionFactory
        -->
        <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
            <!-- 1、数据源信息
                    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
                    <property name="hibernate.connection.url">jdbc:mysql:///ssh324</property>
                    <property name="hibernate.connection.username">root</property>
                    <property name="hibernate.connection.password">root</property>
                    <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
            -->
            <property name="dataSource" ref="dataSource"></property>
            
            <!-- 2、hibernate其他属性
                    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
                    <property name="hibernate.show_sql">true</property>
                    <property name="hibernate.format_sql">true</property>
                    <property name="hibernate.hbm2ddl.auto">update</property>
            -->
            <property name="hibernateProperties">
                <props>
                    <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>
                </props>
            </property>
            
            
            <!-- 3、加载映射
                    <mapping resource="com/itheima/domain/Customer.hbm.xml"/>
            -->
            <property name="mappingResources">
                <list>
                    <value>com/itheima/domain/Customer.hbm.xml</value>
                </list>
            </property>
            
        </bean>

2、声明式事务控制
        <!-- 声明式事务控制 -->
        <!-- 平台事务管理器 -->
        <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
            <property name="sessionFactory" ref="sessionFactory"></property>
        </bean>
        <!-- 配置增强 -->
        <tx:advice id="txAdvice" transaction-manager="transactionManager">
            <tx:attributes>
                <tx:method name="*"/>
            </tx:attributes>
        </tx:advice>
        <!-- 事务的aop织入 -->
        <aop:config>
            <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.itheima.service.impl.*.*(..))"/>
        </aop:config>
        
    3、spring集成web
        spring集成web的整合包:spring-web.jar
        
        在web.xml配置监听器和spring配置文件的地址
        <!-- 配置全局的初始化参数 -->
          <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:applicationContext.xml</param-value>
          </context-param>
          
          <!-- 配置监听器 -->
          <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
          </listener>
          
          
          使用spring-web.jar提供一个工具类获得spring容器对象的引用
            ServletContext servletContext = ServletActionContext.getServletContext();
            ApplicationContext app = WebApplicationContextUtils.getWebApplicationContext(servletContext);
            CustomerService customerService = (CustomerService)app.getBean("customerService");
            customerList = customerService.findAll();
            
    4、struts2集成spring
        导入struts2集成spring的整合包:struts2-spring-plugin.jar
        
        在Action为要注入的service提供set方法:
            private CustomerService customerService;
            public void setCustomerService(CustomerService customerService) {
                this.customerService = customerService;
            }
            
            public String list(){
                customerList = customerService.findAll();
                return "list";
            }
            
        原因:
            struts2默认配置文件  default.properties
                struts对象工厂spring自动注入=按照名称
                struts.objectFactory.spring.autoWire = name
                
                struts2找spring容器按照名称对象自动注入
                
        struts2集成spring两种方式:
            方式一:Action的创建权仍然是Struts2
            方式二:Action的创建权交由spring
                在spring的配置文件中配置Action的Bean
                <bean id="customerAction" class="com.itheima.action.CustomerAction" scope="prototype">
                    <property name="customerService" ref="customerService"></property>
                </bean>
                
                过程:请求---->struts2框架----->从spring容器中找匹配Action----->找到Action 返回给Struts2使用
                                                                          ----->找不到Action Struts2框架会按照class的全包名 自己在创建Action对象
            为什么Struts2框架主动找spring容器要对象???
                在struts2-spring-plugin.jar中有struts-plugin.xml
                
                struts的对象工厂指定为spring
                <constant name="struts.objectFactory" value="spring" />

三、ssh的注解整合方式
    半注解半配置文件方式
    一般情况下 自定义的bean使用注解  非自定义的bean使用配置文件
    
   
    
    
    applicationContext.xml代码

 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd"> <!-- 配置HibernateTemplate模板 -->
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean> <!--开启注解扫描 -->
<context:component-scan base-package="com.jjy"></context:component-scan> <!-- 配置SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<!-- 注入c3p0 -->
<property name="dataSource" ref="dataSource"></property>
<!--注入hibernate的其他配置 -->
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<!-- 是否显示hibernate生成的SQL语句 -->
<prop key="hibernate.show_sql">true</prop>
<!-- 是否使用格式化输出sql语句到控制台 -->
<prop key="hibernate.format_sql">false</prop>
<!-- 配置hibernate采用何种方式生成DDL语句 -->
<prop key="hibernate.hbm2ddl.auto">update</prop>
<!-- 把session和线程绑定,从而实现一个线程只有一个Session -->
<prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate5.SpringSessionContext</prop>
</props>
</property>
<!-- 加载映射 -->
<property name="packagesToScan">
<array>
<value>com.jjy.domain</value>
</array>
</property>
</bean> <!--声明式事务控制 --> <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<!--注入sessionFactory-->
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/> <!-- 配置数据源信息 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql:///2018-8-19"></property>
<property name="user" value="root"></property>
<property name="password" value="root"></property>
</bean>
</beans>

SSH整合(一)的更多相关文章

  1. 三大框架SSH整合

    三大框架SSH整合 -------------------------------Spring整合Hibernate------------------------------- 一.为什么要整合Hi ...

  2. 【Java EE 学习 67 下】【OA项目练习】【SSH整合JBPM工作流】【JBPM项目实战】

    一.SSH整合JBPM JBPM基础见http://www.cnblogs.com/kuangdaoyizhimei/p/4981551.html 现在将要实现SSH和JBPM的整合. 1.添加jar ...

  3. SSH整合(struts2.3.24+hibernate3.6.10+spring4.3.2+mysql5.5+myeclipse8.5+tomcat6+jdk1.6)

    终于开始了ssh的整合,虽然现在比较推崇的是,ssm(springmvc+spring+mybatis)这种框架搭配确实比ssh有吸引力,因为一方面springmvc本身就是遵循spring标准,所以 ...

  4. SSH整合之全注解

    SSH整合之全注解 使用注解配置,需要我们额外引入以下jar包

  5. 用ssh整合时,用sessionfactory的getCurrentSession()获取不到session

    在用ssh整合时,一开始用的是getCurrentSession(),获取当前线程上的session,但是总是抛异常,不能获取. 后来用sessionfactory的openSession(),但是, ...

  6. SSH整合(1)异常

    信息: No Spring WebApplicationInitializer types detected on classpath 十二月 01, 2016 10:06:12 下午 org.apa ...

  7. Spring(八)SSH整合简述

    一.Spring与Struts2的整合 1.1.整合步骤 1.2.配置web.xml 1.3.配置spring配置文件applicationContext.xml 1.4.配置struts配置文件 1 ...

  8. SSH整合之spring整合hibernate

    SSH整合要导入的jar包: MySQL中创建数据库 create database ssh_db; ssh_db 一.spring整合hibernate带有配置文件hibernate.cfg.xml ...

  9. 【转载】Ssh整合开发介绍和简单的登入案例实现

    Ssh整合开发介绍和简单的登入案例实现 Ssh整合开发介绍和简单的登入案例实现 一  介绍: Ssh是strtus2-2.3.1.2+ spring-2.5.6+hibernate-3.6.8整合的开 ...

  10. 【转载】SSH整合使用步骤

    SSH整合使用步骤 由于刚开始学习SSH,其中的配置比较多,为了下次能够快速的进行配置,将SSH整合的过程记录下来,以便下次查阅. 软件环境:MyEclipse 9.0.Struts2.2.Sprin ...

随机推荐

  1. mysql 去除重复数据

    1. 问题描述 有时load或者insert操作导致 表数据有重复 2. 解决方案 通过临时表.主键id.倒腾去重 示例 2.1  create table student( name varchar ...

  2. 简单的数据库连接池实例(java语言)

    1.概述 频繁的创建和销毁数据库连接消耗非常多的系统资源,创建一个池子, 管理一定数量的连接,用的时候去池中取,用完了放回池中,这时比较通用的做法. 2.关键字 LinkedList  synchro ...

  3. vue2.0中v-on绑定自定义事件的理解

    vue中父组件通过prop传递数据给子组件,而想要将子组件的数据传递给父组件,则可以通过自定义事件的绑定. 每个Vue实例都实现了[事件接口],即: 1.使用 $on(eventName) 监听事件 ...

  4. Web前端面试指导(十七):一个满屏 品 字布局 如何设计?

    题目点评 这道题目有可能是笔试题,有可能面谈的时候进行叙述,如果是笔试题要求对css样式代码非常熟练,如果是面谈叙述,就需要你的表达能力非常强,要抓住要点,把需要用到的技能点讲清楚就可以了. 需要用到 ...

  5. react 反模式——不使用jsx动态显示异步组件

    前言: react反模式 (anti-patterns)指的是违背react思想(flux)的coding方式. 本文在 App 组件中,通过 Model.show 动态显示 Model 组件,通过 ...

  6. ubuntu18.04安装谷歌浏览器

    sudo wget http://www.linuxidc.com/files/repo/google-chrome.list -P /etc/apt/sources.list.d/ wget -q ...

  7. GIT团队合作探讨之三--使用分支

    这篇文章是一个作为对git branch的综合介绍.首先,我们会看看创建branch,这有点像是请求一个新的项目历史.然后,我们看看git checkout是如何能够被用来选择一个branch,最后看 ...

  8. 设置导出的excel数据

    /** * 设置导出的excel数据 * @param type $objPHPExcel * @param type $colModel * @param type $grid */public f ...

  9. Nginx配置虚拟机,url重写,防盗链

    配置目录: ·     虚拟主机 ·     PHP支持 ·     URL重写 ·     防止盗链 ·     持续更新… 一.虚拟主机 1.创建 文件格式:{域名}.conf 具体如下: $ s ...

  10. Struts2与Hibernate联合开发步骤

    hibernate与struts2的联合开发步骤: 1. 建立web工程 2. 加入jar包,struts2.hibernate.数据库连接的包 3. 数据表和bean之间的映射,以及相应的映射文件* ...