Spring框架(四):SSH整合

1、上一章内容回顾

 Spring的AOP的注解(思想–)
   AOP的相关的注解
     @Aspect :定义切面
     通知的注解
       @Before :前置通知
       @AfterReturning :后置通知
       @Around :环绕通知
       @AfterThrowing :异常抛出通知
       @After :最终通知
     切入点
       @Pointcut :切入点
 Spring的JDBC模板
   Spring有持久层解决方案
   手动使用JDBC模板
   将连接池和JDBC模板交给Spring管理
   配置开源连接池
     DBCP
     C3P0
   使用JDBC模板完成CRUD的操作
 Spring的事务管理
   事务回顾
   Spring的事务管理的API
     PlatformTransactionManager :平台事务管理器(真正管理事务)
       DataSourceTransactionManager
       HibernateTransactionManager
     TransactionDefinition :事务定义信息
     TransactionStatus :事务状态
   Spring事务管理
     编程式事务管理(了解)
     声明式事务管理—底层思想就是AOP
       XML
         引入aop开发包
         配置事务管理器
         配置增强<tx:Advice>
         配置aop
       注解
         引入aop开发包
         配置事务管理器
         开启注解事务
         在业务层添加注解

2、SSH整合方式一:无障碍整合(***)

无障碍整合:Struts2、Hibernate的配置文件等还都保留着

SSH框架回顾

SSH的回顾

SSH整合

第一步:创建web项目,引入jar包
 Struts2的jar包
   struts-2.3.24\apps\struts2-blank\WEB-INF\lib\所有jar(13个)
   Struts2中有一些包需要了解的:
     struts2-convention-plugin-2.3.24.jar ----Struts2的注解开发包。
     struts2-json-plugin-2.3.24.jar ----Struts2的整合AJAX的开发包。
     struts2-spring-plugin-2.3.24.jar ----Struts2的整合Spring的开发包。
 Hibernate的jar包
   Hibernate的开发的必须的包(10个)
     hibernate-release-5.0.7.Final\lib\required\所有jar
   MySQL驱动(1个)
   日志记录(3个)
   使用C3P0连接池(3个)
   注意:Struts2和Hibernate都引入了一个相同的jar包(javassist包)删除一个
 Spring的jar包
   IOC的开发(6个)
   AOP的开发(4个)
   JDBC模板的开发(2个)
   事务管理(1个)
   整合web项目的开发(1个)
   整合单元测试的开发(1个)
   整合hibernate的开发(1个)
第二步:引入配置文件
 Struts的配置文件
   web.xml
核心过滤器
   struts.xml
 Hibernate的配置文件
   hibernate.cfg.xml
     删除那个与线程绑定的session(Spring已经有了)
   映射文件
 Spring的配置文件
   web.xml
sping核心监听器
   applicationContext.xml
   日志记录
     log4j.properties
第三步:创建包结构
第四步:创建相关类
包结构
第五步:引入相关的页面
第六步:修改add.jsp
add
第七步:Spring整合Struts2方式一:Action由Struts2自身创建的
 编写Action
客户管理的action
 配置Action
   在struts.xml中配置
strutsXML
 在Action中引入Service
   传统方式
action中使用service
   进行Spring和Struts2的整合:
     引入struts-spring-plugin.jar
     在插件包中有如下配置
插件包
    *****开启一个常量:在Struts2中只有开启这个常量就会引发下面常量生效:
常量
     让Action按照名称自动注入Service:
   将Service交给Spring管理
Action注入Service
完整
注意: Struts2这个拉跨的,2.5的找不到dtd,注入的时候名字必须要和类名一致才行

第八步:Spring整合Struts2方式二:Action交给Spring管理(推荐)
 引入插件包
   引入struts-spring-plugin.jar
 将Action交给Spring
spring配置action
 在struts.xml中配置Action
struts中配置
 注意:
   需要配置Action为多例的:
   需要手动注入Service(不手动注入会报错)
   使用该方式优点:1、管理方便 2、可用AOP

第九步:Service调用DAO
 将DAO交给Spring管理
dao给Spring
 在Service注入DAO
注入dao
注入d
第十步:Spring整合Hibernate框架
 创建数据库和表

Create database ssh1;
Use ssh1;
CREATE TABLE `cst_customer` (
  `cust_id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '客户编号(主键)',
  `cust_name` varchar(32) NOT NULL COMMENT '客户名称(公司名称)',
  `cust_source` varchar(32) DEFAULT NULL COMMENT '客户信息来源',
  `cust_industry` varchar(32) DEFAULT NULL COMMENT '客户所属行业',
  `cust_level` varchar(32) DEFAULT NULL COMMENT '客户级别',
  `cust_phone` varchar(64) DEFAULT NULL COMMENT '固定电话',
  `cust_mobile` varchar(16) DEFAULT NULL COMMENT '移动电话',
  PRIMARY KEY (`cust_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

 编写实体和映射
 Spring和Hibernate整合
   在Spring的配置文件中,引入Hibernate的配置的信息
整合Hibernate
 在Spring和Hibernate整合后,Spring提供了一个Hibernate的模板类简化Hibernate开发。
   改写DAO继承HibernateDaoSupport
   配置的时候在DAO中直接注入SessionFactory
注入
   在DAO中使用Hibernate的模板完成保存操作
dao

第十一步:配置Spring的事务管理
 配置事务管理器
 开启注解事务
配置平台
 在业务层使用注解:@Transactional
这里使用SSH整合时会一直出现一个问题:解决Cannot unwrap to requested type [javax.sql.DataSource]

3、SSH整合方式二:将hibernate的配置交给Spring管理(***)

SSH整合方式二:不带hibernate配置文件

复制一个项目
hibernate配置文件中有哪些内容:
 数据库连接的配置
 Hibernate的相关的属性的配置
   方言
   显示SQL
   格式化SQL
   ……
 C3P0连接池
 映射文件
将Hibernate的配置交给Spring

<!-- 配置C3P0连接池 -->        
<context:property-placeholder location="classpath:jdbc.properties"/>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
	<property name="driverClass" value="${jdbc.driverClass}"/>
	<property name="jdbcUrl" value="${jdbc.url}"/>
	<property name="user" value="${jdbc.username}"/>
	<property name="password" value="${jdbc.password}"/>
</bean>
   
<!-- Spring整合Hibernate(最终整合的都在这里) -->
<!-- 引入Hibernate的配置的信息 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
   	<!-- 注入连接池 -->
	<property name="dataSource" ref="dataSource"/>
	<!-- 配置Hibernate相关属性 -->
	<property name="hibernateProperties" >
		<props>
			<!-- 配置Hibernate的方言 -->
			<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
			<!-- ###可选配置### 1、打印sql语句 2、格式化sql语句 3、自动建表 -->
			<prop key="hibernate.show_sql">true</prop>
			<prop key="hibernate.format_sql">true</prop>
			<prop key="hibernate.hbm2ddl.auto">update</prop>
			<!--
				设置事务隔离级别:hibernate.connection.isolation
				1  Read Uncommited 可读未提交
				2  Read Commited 可读已提交
				4  Repeatable Read 可重复读
				8  Serializable 串行化
			 -->
			<prop key="hibernate.connection.isolation">4</prop>
		</props>
	</property>
	<!-- 设置映射文件 -->
	<property name="mappingResources">
		<list>
			<value>domain/Customer.hbm.xml</value>
		</list>
	</property>
</bean>

4、Hibernate的模板的使用

Hibernate模板的常用的方法

保存操作
 save(Object obj);
修改操作
 update(Object obj);
删除操作
 delete(Object obj);
查询操作
 查询一个
   get(Class c,Serializable id);
   load(Class c,Serializable id);
 查询多个
   List find(String hql,Object… args);
   List findByCriteria(DetachedCriteria dc);
   List findByCriteria(DetachedCriteria dc,int firstResult,int maxResults);
   List findByNamedQuery(String name,Object… args); //这种要现在applicationContext中配置一下query标签(了解即可)
dao实现类

5、延迟加载问题的解决(***)

Spring提供了延迟加载的解决方案

常见的延迟加载出现问题的情况
 使用load方法查询某一个对象的时候(不常用)
 查询到某个对象以后,显示其关联对象。
延迟加载出现位置
延迟加载问题产生原因
解决方法就是在web.xml的struts2的过滤器前加上OpenSessionInViewFilter,并过滤*.action即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hillain

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值