一、SSH框架整合方式一:无障碍整合
1.SSH框架整合开发回顾
Spring整合web项目,有可能是Servlet作为web层,若果是servlet作为web层,必须使用工厂获得业务层类,但是如果使用Struts2,Struts2里面有一个插件,可以简化web层代码。
SSH整合
1. 第一步:创建web项目,引入jar包
-
Struts2的jar包
struts2-convention-plugin-2.3.24.jar --------Struts2的注解开发包。 struts2-json-plugin-2.3.24.jar -----------Struts2的注解开发包。 struts2-spring-plugin-2.3.24.jar--------------Struts2的整合Spring的开发包。 struts-2.3.24\apps\struts2-blank\WEB-INF\lib\*.jar
-
Hibernate的jar包
hibernate-release-5.0.7.Final\lib\required*.jar ------Hibernate的开发的必须的包
MySQL驱动
日志记录
使用C3P0连接池
注意:Struts2和Hibernate都引入了一个相同的jar包(javassist包)。删除一个
- Spring的jar包
IOC的开发
AOP的开发
JDBC模板的开发
事务管理
整合web项目的开发
整合单元测试的开发
整合hibernate的开发
2. 第二步:引入配置文件
- Struts的配置文件
struts.xml
web.xml
<!-- 配置Struts2的核心过滤器 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- Hibernate的配置文件
hibernate.cfg.xml - Spring的配置文件
applicationContext.xml
log4j.properties
web.xml
<!-- 配置Spring的核心监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
3. 第三步:创建包结构
4. 第四步:创建相关类
5. 第五步:引入相关的页面
6. 第六步:修add.jsp
7. 第七步:Spring整合Struts2方式一:Action由自身创建
编写Action
/**
* 客户管理的Action的类
*
* @author jt
*/
public class CustomerAction extends ActionSupport implements ModelDriven<Customer> {
// 模型驱动使用的对象:
private Customer customer = new Customer();
@Override
public Customer getModel() {
return customer;
}
/**
* 保存客户的方法:save
*/
public String save() {
System.out.println("Action中的save方法执行了...");
return NONE;
}
}
配置Action( 在struts.xml中配置)
<!-- 配置Action -->
<package name="ssh1" extends="struts-default" namespace="/">
<action name="customer_*" class="customerAction" method="{1}">
</action>
</package>
在Action中引入Service
- a.进行Spring和Struts2的整合
引入struts-spring-plugin.jar
让Action按照名称自动注入Service
将Service交给Spring管理 - b.将Service交给Spring管理
/**
* 客户管理的Action的类
*
* @author jt
*/
public class CustomerAction extends ActionSupport implements ModelDriven<Customer> {
// 模型驱动使用的对象:
private Customer customer = new Customer();
@Override
public Customer getModel() {
return customer;
}
// 注入CustomerService:
private CustomerService customerService;
public void setCustomerService(CustomerService customerService) {
this.customerService = customerService;
}
/**
* 保存客户的方法:save
*/
public String save() {
// 如果web层没有使用Struts2,获取业务层的类就必须如下进行编写:
/*WebApplicationContext applicationContext = WebApplicationContextUtils
.getWebApplicationContext(ServletActionContext.getServletContext());
CustomerService customerService = (CustomerService) applicationContext.getBean("customerService");*/
System.out.println("Action中的save方法执行了...");
customerService.save(customer);
return NONE;
}
}
8. 第八步:Spring整合Struts2方式二:Action交给Spring管理(推荐+++)
引入插件包
– 引入struts-spring-plugin.jar
将Action交给Spring
在struts.xml中配置Action
注意:
– 需要配置Action为多例的:
– 需要手动注入Service
9. 第九步:Service调用DAO
将DAO交给Spring管理
在Service注入DAO
10.第十步:Spring整合Hibernate 框架
在Spring的配置文件中,引入Hibernate的配置的信息
在Spring和Hibernate整合后,Spring提供了一个Hibernate的模板类简化Hibernate开发
11.第十一步:配置Spring的事务管理器
配置事务管理器
开启注解事务
在业务层使用注解
二、SSH框架整合二:将hibernate的配置交给spring管理
hibernate配置文件中有哪些内容:
数据库连接的配置
Hibernate的相关的属性的配置
– 方言
– 显示SQL
– 格式化SQL
– 。。。
C3P0连接池
映射文件
将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>
三、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);
四、延迟加载问题的解决
在SSH整合开发中哪些地方会出现延迟加载
使用load方法查询某一个对象的时候(不常用)
查询到某个对象以后,显示其关联对象