首页 > 代码库 > 三大框架整合详解

三大框架整合详解

SSH三大框架整合 
1、 各个框架知识点分析 --- 整合(并不是真正意义上整合)
1)struts2 学习版本2.3.7 
解压目录 apps 案例demo , docs 文档 ,lib jar包, src 框架源代码 
最基本jar包 : apps/struts2-blank.war 11个jar 


struts2-convention-plugin-2.3.7.jar用于struts使用注解 (不用注解时 一定不要导入 )
struts2-json-plugin-2.3.7.jar 用于struts2整合Ajax (使用 json-lib )
struts2-spring-plugin-2.3.7.jar 用于struts2整合Spring (用于整合Spring)


配置 web.xml Filter作为struts2框架核心控制器入口 、src目录配置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>


2) spring3 学习版本 3.2.0 
解压目录 docs 文档规范,lib jar包, schema 约束文件 


最基本jar包 :spring-beans.jar  spring-core.jar spring-context.jar spring-expression.jar 、common-loggins.jar  log4j.jar 
web应用中使用spring :  spring-web.jar 
测试spring和junit整合: spring-test.jar 
spring aop编程 : spring-aop.jar spring-aspect.jar aopalliance.jar  aspect-weaver.jar
jdbcTemplate : spring-jdbc.jar spring-tx.jar  
spring整合其他ORM框架: spring-orm.jar  (用于整合Hibernate ) 


配置 log4j.properties 、web.xml 配置核心监听器 、 src或WEB-INF下创建applicationContext.xml 


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>


在Servlet/Filter中获得Spring上下文对象
WebApplicationContext context= WebApplicationContextUtils.getWebApplicationContext(servletContext);


3) hibernate3 学习版本 3.6.10 
解压目录 documentation 文档规范, lib jar包, project 源码 , hibernate3.jar 框架核心jar包 
最基本jar包:hibernate3.jar 、lib\required\*.jar (6个)、lib\jpa\jpa.jar 、slf4j-log4j12-1.7.2.jar、 log4j.jar 、 lib\optional\c3p0\c3p0.jar、 jdbc驱动 
二级缓存 EHCache : backport-util-concurrent.jar、commons-logging.jar 、ehcache-1.5.0.jar 


配置 log4j.properties 、src下创建hibernate.cfg.xml (jdbc连接基本参数) 、为domain创建 hbm映射文件 


hibernate.cfg.xml 


<hibernate-configuration>
<session-factory>
<!-- jdbc四个基本连接参数,方言 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///spring3day3</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">abc</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>

<!-- 自动建表 -->
<property name="hibernate.hbm2ddl.auto">update</property>

<!-- 使用c3p0连接池 -->
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>

<!-- 控制台打印SQL -->
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
</session-factory>
</hibernate-configuration>


Product.hbm.xml


<hibernate-mapping>
<class name="domain.Product" table="products" catalog="spring3day3">
<id name="id">
<generator class="native"></generator>
</id>
<property name="name"></property>
<property name="price"></property>
</class>
</hibernate-mapping>   


在hibernate.cfg.xml 注册hbm文件 <mapping resource="domain/Product.hbm.xml"/> 


*** SessionFactory 只初始化一次,编写HibernateUtils 


2、 XML方式整合三大框架 (Struts2整合Spring3,Spring3整合Hibernate3) 
1) struts2出现默认就提供对Spring的整合 
第一步 到入整合插件包 struts2-spring-plugin-2.3.7.jar 
第二步 在struts.xml 配置常量, 将Action对象创建权 交给Spring  <constant name="struts.objectFactory" value=http://www.mamicode.com/"spring">


第一种 struts2 整合 Spring配置 ,将Action 创建权交给Spring 
struts.xml
<package name="basic" extends="struts-default" namespace="/">
<!-- 第一种,action标签 class属性,配置伪类 -->
<action name="addProduct" class="productAction" method="add">
<result>/success.jsp</result>
</action>
</package>
applicationContext.xml 
<!-- 配置Action -->
<bean id="productAction" class="web.action.ProductAction" scope="prototype">
<property name="productService" ref="productService"></property>
</bean>
**********************  重点重点重点 : struts2管理Action对象是多例的, Spring管理Action ,默认单例的 


第二种 自动装配Service ,由struts和spring整合插件 创建Action, 会自动装配Service对象 
struts.xml 
<action name="addProduct" class="web.action.ProductAction" method="add">
<result>/success.jsp</result>
</action>
applicationContext.xml
<bean id="productService" class="service.ProductService"></bean>




2) spring3整合hibernate  导入jar :spring-orm-3.2.0.RELEASE.jar 需要依赖 spring-jdbc.jar spring-tx.jar 
第一种 零障碍整合  
配置Spring 加载Hibernate配置文件 
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!-- hibernate配置文件位置 -->
<property name="configLocation" value=http://www.mamicode.com/"classpath:hibernate.cfg.xml">
</bean>
使DAO类 继承HibernateDaoSupport ,为DAO注入 SessionFactory 
<bean id="productDAO" class="dao.ProductDAO">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
将DAO 注入到Service中 
<bean id="productService" class="service.ProductService">
<property name="productDAO" ref="productDAO"></property>
</bean>
将Service注入到Action中 


****** DAO中操作Hibernate 通过 HibernateTemplate 进行操作 


进行事务管理  ----- 依赖AOP 


<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>

<!-- 注解驱动事务管理 -->
<tx:annotation-driven transaction-manager="transactionManager"/>


在Service方法上 应用 @Transactional 注解


第二种 不需要编写Hibernate配置文件,直接将Hibernate配置参数 写入到Spring的配置文件  (开发中常用)
hibernate配置文件主要有三个部分 (JDBC连接基本参数、Hibernate常用属性、hbm文件映射 ) -------------- 写入spring的配置文件 


通过 dataSource 配置,配置jdbc基本连接参数 
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- c3p0数据源  -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value=http://www.mamicode.com/"${jdbc.driverClass}">
<property name="jdbcUrl" value=http://www.mamicode.com/"${jdbc.url}">
<property name="user" value=http://www.mamicode.com/"${jdbc.user}">
<property name="password" value=http://www.mamicode.com/"${jdbc.password}">
</bean>
通过hibernateProperties 配置Hibernate基本属性
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.current_session_context_class">thread</prop>
</props>
</property>
通过mappingDirectoryLocations配置hbm文件 
<property name="mappingDirectoryLocations">
<list>
<value>classpath:domain</value>
</list>
</property>


----------------------------------------------------------------------------------------------------------------------
在SSH整合后,Spring提供HibernateTemplate, 在DAO中,通过HibernateTemplate 间接操作Hibernate API 
1) 增加操作  save 
2) 修改操作  update 
3) 删除操作  delete 
4) 根据id查询 get/load 
List find(String queryString,Object... values) 查询一个集合对象 (带条件查询) ----- 手动写HQL语句
List findByCriteria(DetachedCriteria criteria) 条件查询   ------ 面向对象方式封装,自动生成HQL 
List findByCriteria(DetachedCriteria criteria,int firstResult, int maxResults)  ----- 分页查询 
List findByNamedQuery(String queryName, Object...values)  将HQL语句命名,配置到配置文件 ,进行查询 
List findByExample(Object exampleEntity) 根据范例查询 ,默认等值查询,设置like查询 


----------------------------------------------------------------------------------------------------------------------
3、 采用全注解方式三大框架整合 




39个jar包 ,在ssh2基础上 导入 struts2-convention-plugin-2.3.7.jar 
复制web.xml 


web.action 必须含有 action actions struts struts2 才能被struts2 注解插件扫描到 
Action的注解配置 


@Namespace("/")
@ParentPackage("struts-default")
public class ProductAction extends ActionSupport{
@Action(value=http://www.mamicode.com/"addProduct",results={@Result(name="success",location="/success.jsp")})
public String add(){
System.out.println("添加商品");
return SUCCESS;
}
}


在Action中注入Service 
applicationContext.xml 
<!-- 自动扫描Service -->
<context:annotation-config />
<context:component-scan base-package="service"></context:component-scan>
在ProductService 使用 @Service 




在Service中注入DAO
applicationContext.xml 
<context:component-scan base-package="service,dao"></context:component-scan>
在ProductDAO 使用 @Repository 




配置PO类
@Entity
@Table(name="products")
public class Product {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id; 
private String name;
private Double price;
applicationContext.xml 
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<!-- JDBC数据源 -->
<property name="dataSource" ref="dataSource"></property>
<!-- Hibernate常规属性 -->
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.current_session_context_class">thread</prop>
</props>
</property>
<!-- 会自动扫描路径下所有PO类文件  -->
<property name="packagesToScan">
<list>
<value>domain</value>
</list>
</property>
</bean>




将SessionFactory 交给DAO操作, 继承HibernateDaoSupport 不能用注解 
<!-- 配置Hibernate模板 -->
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>


@Repository
public class ProductDAO {
@Autowired
private HibernateTemplate hibernateTemplate;


对业务层添加事务管理
@Service // 这可以用@Component
@Transactional
public class ProductService { 


}

三大框架整合详解