SSH整合(一)
一、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整合(一)的更多相关文章
- 三大框架SSH整合
三大框架SSH整合 -------------------------------Spring整合Hibernate------------------------------- 一.为什么要整合Hi ...
- 【Java EE 学习 67 下】【OA项目练习】【SSH整合JBPM工作流】【JBPM项目实战】
一.SSH整合JBPM JBPM基础见http://www.cnblogs.com/kuangdaoyizhimei/p/4981551.html 现在将要实现SSH和JBPM的整合. 1.添加jar ...
- 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标准,所以 ...
- SSH整合之全注解
SSH整合之全注解 使用注解配置,需要我们额外引入以下jar包
- 用ssh整合时,用sessionfactory的getCurrentSession()获取不到session
在用ssh整合时,一开始用的是getCurrentSession(),获取当前线程上的session,但是总是抛异常,不能获取. 后来用sessionfactory的openSession(),但是, ...
- SSH整合(1)异常
信息: No Spring WebApplicationInitializer types detected on classpath 十二月 01, 2016 10:06:12 下午 org.apa ...
- Spring(八)SSH整合简述
一.Spring与Struts2的整合 1.1.整合步骤 1.2.配置web.xml 1.3.配置spring配置文件applicationContext.xml 1.4.配置struts配置文件 1 ...
- SSH整合之spring整合hibernate
SSH整合要导入的jar包: MySQL中创建数据库 create database ssh_db; ssh_db 一.spring整合hibernate带有配置文件hibernate.cfg.xml ...
- 【转载】Ssh整合开发介绍和简单的登入案例实现
Ssh整合开发介绍和简单的登入案例实现 Ssh整合开发介绍和简单的登入案例实现 一 介绍: Ssh是strtus2-2.3.1.2+ spring-2.5.6+hibernate-3.6.8整合的开 ...
- 【转载】SSH整合使用步骤
SSH整合使用步骤 由于刚开始学习SSH,其中的配置比较多,为了下次能够快速的进行配置,将SSH整合的过程记录下来,以便下次查阅. 软件环境:MyEclipse 9.0.Struts2.2.Sprin ...
随机推荐
- Python入门-装饰器初始
今天我们就围绕一个来展开,那就是:装饰器 一.装饰器 在说装饰器之前,我们先说一个软件设计的原则:开闭原则,又被称为开放封闭原则,你的代码对功能的扩展是开放的,你的程序对修改源代码是封闭的,这样的软件 ...
- 模块—— 序列化模块、random模块、os模块 、 sys模块、hashlib模块、collections模块
今天我们来说说Python中的模块: 第三方模块 可以下载/安装/使用 第一步:将pip.exe 所在的目录添加到环境变量中第二步:输入pip第三步:pip install 要安装的模块名称 #pi ...
- Git 学习记录
安装 1. https://git-for-windows.github.io下载(网速慢的同学请移步国内镜像),然后按默认选项安装即可.安装完成后,在开始菜单里找到“Git”->“Git B ...
- 消息循环中的TranslateMessage函数和DispatchMessage函数,特别注意WM_TIMER消息
原文:http://www.cnblogs.com/xingrun/p/3583357.html TranslateMessage函数 函数功能描述:将虚拟键消息转换为字符消息.字符消息被送到调用线程 ...
- hack (浏览器兼容css hack)
1.hack的原理 由于不同的浏览器对CSS的支持及解析结果不一样,还由于CSS中的优先级的关系.我们就可以根据这个来针对不同的浏览器来写不同的CSS. CSS Hack大致有3种表现形式,CSS类内 ...
- Android学习——Service(二)
今天来介绍Service的第二种使用方式,Bind方式 Bind方式启动服务 Bind方式和Start方式启动很类似,都是通过Intent来启动,不同的是,Bind方式需要传入三个参数,如下: Int ...
- 根据ip抓 包
tcpdump -i any -s 0 host 101.81.134.53 -c 1000 -w ./zhj.cap
- base64编码加密图片和展示图片
base64是当前网络上最为常见的传输8Bit字节代码的编码方式其中之一.base64主要不是加密,它主要的用途是把某些二进制数转成普通字符用于 网络传输.由于这些二进制字符在传输协议中属于控制字符, ...
- MapReduce过程详解(基于hadoop2.x架构)
本文基于hadoop2.x架构详细描述了mapreduce的执行过程,包括partition,combiner,shuffle等组件以及yarn平台与mapreduce编程模型的关系. mapredu ...
- BUG Review:关于getting 'android:xxx' attribute: attribute is not a string value的问题及解决方法
我们在使用Android Studio开发完应用程序后,都要将打好的apk安装包上传到各大应用市场,但是有时候上传时应用市场会出现提交的安装包不能通过应用市场的aapt解析而被打回的情况. 他们使用a ...