一、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. Java Jsp使用

    1.Jsp基础 1)Jsp的执行过程 tomcat服务器完成:jsp文件->翻译成java文件->编译成class字节码文件-> 构造类对象-> 调用方法 tomcat的wor ...

  2. 注册表----修改Win7登录界面

    在进行操作前,需要准备好背景图片.对背景图片的要求有三点: (1)图片必须是JPG格式: (2)必须将图片命名为backgroundDefault; (3)图片的体积必须小于256KB. 按下[Win ...

  3. 基于SignalR的站点有连接数限制问题及解决方案

    最近在做一个Web项目,由于需要实现客户端和服务器的双向通信,所以就用到了SignalR2.0:站点的运行环境是Win7服务器,IIS7,但遇到了一个问题,就是当客户端连接数到达10个以后,后面的用户 ...

  4. c++ 读写结构体到文件

    可以使用fwrite()将一个结构体写入文件:  fwrite(&some_struct,sizeof somestruct,1,fp);对应的fread函数可以再把它读出来,此处fwrite ...

  5. 微软与Node.js的开源之旅

    微软近年来在开源领域可谓是大刀阔斧的前进中,继2015年微软与红帽合作,微软智能云Azure与Linux进一步融合等举措之后,2016年,微软继续加大开源之举,大力推进Node.js的开发和开源社区的 ...

  6. js前台检测上传图片大小的总结

    最近一直在做上传图片的前端检测,不通过后台就完成这个动作.但实际是,实际效果差强人意. html5的fileApi出来后,对文件的处理才变得方便了些,对它的简单介绍可以看我的前面的博客.现在支持的浏览 ...

  7. mongodb 启动

    >mongod.exe --dbpath  C:\Environ\mongodb-3.0.6\data\db >mongod.exe --logpath "C:\Environ\ ...

  8. Python初学者第一天 Python安装及第一个Python程序

    Python基础: 1day: 1.Python基础: A.编程语言介绍:     a. 计算机只能理解0和1.编程即写一段按照一定规则写代码,让计算机帮你干活:     b.机器语言:最底层的语言, ...

  9. 《C++ Primer Plus》读书笔记之二—复合类型

    二.第四章 复合类型  1.C-风格字符串:C-风格字符串具有一种特殊的性质:以空字符结尾,空字符被写成\0,其ASC||编码为0,用来标记字符串的结尾.例如: char dog[5]={'b','e ...

  10. easyui学习笔记1—增删改操作

    最近公司要用easyui,这里自己看了官网几篇文章,遇到些问题,大多数的问题都是敲代码的时候笔误,其他有些地方确实需要注意一下,这里做些笔记. 1.在mysql中建好表之后修改id字段为递增字段,发现 ...