4、SSH整合
4.1 SSH整合方式一:无障碍整合
4.1.1 MVC框架思路
4.1.2 创建web项目引入jar包(包含struts2日志包+spring测试包 共计43项)
Struts2的jar包:利用struts2的app下的空项目blank的war包在Tomcat下来得到。
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的开发包。
Spring的jar包:IOC开发、AOP开发、JDBC模板开发、事务管理、整合web项目的开发、整合单元测试的开发。
IOC的开发
AOP的开发
JDBC模板的开发
事务管理
整合web项目的开发
整合单元测试的开发
整合hibernate的开发
Hibernate的Jar包:
Hibernate必须的包:
Mysql驱动包:
日志记录包:
C3P0的包:
注意:Struts2和Hibernate都引入了一个相同的jar包(javassist包),删除一个低版本的。
4.1.3 引入配置文件
Struts2配置文件:
web.xml中添加核心过滤器
struts.xml文件
Hibernate配置文件:
hibernate.cfg.xml 文件(删除线程绑定配置)
映射文件
Spring配置文件:
web.xml中添加核心监听器
applicationContext.xml文件
日志记录文件:
log4j.xml文件
4.1.4 创建包结构并创建响应的类和测试页面
4.1.5 Spring整合Struts2
方式一:Action由Struts2自身创建的。
编写Action
配置Action
在struts.xml中配置
在Action中引入Service
传统方式
进行Spring和Struts2的整合:
- 引入struts-spring-plugin.jar
- 在插件包中有如下配置
*****开启一个常量:在Struts2中只有开启这个常量就会引发下面常量生效:
让Action按照名称自动注入Service:
将Service交给Spring管理
Action注入Service
方式二:Action交给Spring管理(推荐)
引入插件包
- 引入struts-spring-plugin.jar
- 将Action交给Spring
3. 在struts.xml中配置Action
注意: 需要配置Action为多例的:
需要手动注入Service
4.1.6 实际流程说明
4.1.6.1 Service调用DAO
将DAO交给Spring管理
在Service注入DAO
创建数据库/表、实体类完善Dao层结构
4.1.6.2 Spring整合Hibernate
Spring和Hibernate整合
在Spring的配置文件中,引入Hibernate的配置的信息
在Spring和Hibernate整合后,Spring提供了一个Hibernate的模板类简化Hibernate开发。
改写DAO继承HibernateDaoSupport
配置的时候在DAO中直接注入SessionFactory
在DAO中使用Hibernate的模板完成保存操作
4.1.6.3 配置Spring的事务管理
配置事务管理器
开启注解事务
在业务层使用注解
4.2 SSH整合方式二:将Hibernate的配置交给Spring
方式二在Spring与Hibernate整合之前的工作一样,这里不做累述。
4.2.1 hibernate配置文件中有哪些内容:
- 数据库连接的配置
- Hibernate的相关的属性的配置
- 方言
- 显示SQL
- 格式化SQL
- 。。。
- C3P0连接池
- 映射文件
4.2.2 将Hibernate的配置交给Spring管理
<!-- 引入外部属性文件=============================== -->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- 配置C3P0连接池=============================== -->
<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>
<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>
<!-- 设置映射文件 -->
<property name="mappingResources">
<list>
<value>com/itheima/ssh/domain/Customer.hbm.xml</value>
</list>
</property>
</bean>
4.3针对以上两种方法补充说明: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);
4.4 Spring提供了延迟加载的解决方案
在SSH整合开发中哪些地方会出现延迟加载
- 使用load方法查询某一个对象的时候(不常用)
- 查询到某个对象以后,显示其关联对象。
延迟加载问题出现的原因
延迟加载问题的解决方法
在web.xml中配置SessionInViewFilter过滤器,使session在web层中开启关闭。
注意:SessionInViewFilter过滤器必须在Struts2的核心过滤器之前(过滤器有加载顺序)
谢谢阅读 ---知飞翀