SSH三大框架整合的几种方式

目录

SSH框架整合:

Struts2+Spring+Hibernate导包

Struts2和Spring的整合:

 

Struts2和Spring的整合两种方式:

Spring整合Hibernate:

零障碍整合:(一)

没有Hibernate配置文件的形式(二)

HibernateTemplate的API:

扫描二维码关注公众号,回复: 4112215 查看本文章

基于注解的方式整合SSH:


    1. SSH框架整合:

      1. Struts2+Spring+Hibernate导包

Struts2导入jar包:

* struts2/apps/struts2-blank.war/WEB-INF/lib/*.jar

* 导入与spring整合的jar

* struts2/lib/struts2-spring-plugin-2.3.15.3.jar --- 整合Spring框架

* struts2/lib/struts2-json-plugin-2.3.15.3.jar --- 整合AJAX

* struts2/lib/struts2-convention-plugin-2.3.15.3.jar --- 使用Struts2注解开发.

* 配置

web.xml

<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>

struts.xml

<struts>

    <constant name="struts.devMode" value="true" />

    <package name="default" namespace="/" extends="struts-default">

    

    </package>

</struts>

Spring导入jar包:

Spring3.2 开发最基本jar包

spring-beans-3.2.0.RELEASE.jar

spring-context-3.2.0.RELEASE.jar

spring-core-3.2.0.RELEASE.jar

spring-expression-3.2.0.RELEASE.jar

com.springsource.org.apache.commons.logging-1.1.1.jar

com.springsource.org.apache.log4j-1.2.15.jar

AOP开发

spring-aop-3.2.0.RELEASE.jar

spring-aspects-3.2.0.RELEASE.jar

com.springsource.org.aopalliance-1.0.0.jar

com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar

Spring Jdbc开发

spring-jdbc-3.2.0.RELEASE.jar

spring-tx-3.2.0.RELEASE.jar

Spring事务管理

spring-tx-3.2.0.RELEASE.jar

Spring整合其他ORM框架

spring-orm-3.2.0.RELEASE.jar

Spring在web中使用

spring-web-3.2.0.RELEASE.jar

Spring整合Junit测试

spring-test-3.2.0.RELEASE.jar

(Spring没有引入c3p0和数据库驱动)

* 配置:

applicationContext.xml

Log4j.properties

在web.xml中配置监听器;

<!-- 配置Spring的监听器 -->

<listener>

<!-- 监听器默认加载的是WEB-INF/applicationContext.xml -->

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

<!-- 指定Spring框架的配置文件所在的位置 -->

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:applicationContext.xml</param-value>

</context-param>

Hibernate的jar包导入:

* 核心包:hibernate3.jar

* lib/required/*.jar

* lib/jpa/*.jar

* 引入hibernate整合日志系统的jar包:

* 数据连接池:

* 数据库驱动:

* 二级缓存:(可选的.)

* backport-util-concurrent.jar

* commons-logging.jar

* ehcache-1.5.0.jar

* Hibernate的配置:

* hibernate.cfg.xml

* 映射:

* 格式:类名.hbm.xml

      1. Struts2和Spring的整合:

1.新建包结构:

* cn.itcast.action

* cn.itcast.service

* cn.itcast.dao

* cn.itcast.vo

2.创建实体类:

* Book

3.新建一个jsp页面:

* addBook.jsp

        <s:form action="book_add" namespace="/" method="post" theme="simple">

图书名称:<s:textfield name="name"/><br/>

图书价格:<s:textfield name="price"/><br/>

<s:submit value="添加图书"/>

</s:form>

  1. 编写Action:

public class BookAction extends ActionSupport implements ModelDriven<Book>{

// 模型驱动类

private Book book = new Book();

public Book getModel() {

return book;

}

// 处理请求的方法:

public String add(){

System.out.println("web层的添加执行了...");

return NONE;

}

}

5.配置struts.xml

<action name="book_*" class="cn.itcast.action.BookAction" method="{1}">

    

     </action>

 

      1. Struts2和Spring的整合两种方式:

Struts2自己管理Action:(方式一)

<action name="book_*" class="cn.itcast.action.BookAction" method="{1}">

* Struts2框架自动创建Action的类.

Action交给Spring管理:(方式二)

第一步:在<action>标签上通过一个伪类名方式进行配置:

<action name="book_*" class="bookAction" method="{1}"></action>

第二部:在spring的配置文件中:

<!-- 配置Action -->

<bean id="bookAction" class="cn.itcast.action.BookAction"></bean>

(*****)注意:Action交给Spring管理一定要配置scope=”prototype

推荐使用二:

* 在Spring中管理的类,可以对其进行AOP开发.统一的管理.

Web层获得Service:

传统方式:

* 获得WebApplicationContext对象.

* 通过WebAppolicationContext中getBean(“”);

实际开发中:

* 引入了struts2-spring-plugin-2.3.15.3.jar

* 有一个配置文件 : struts-plugin.xml

开启常量 :

<constant name="struts.objectFactory" value="spring" />

引发另一个常量的执行:(Spring的工厂类按照名称自动注入)

struts.objectFactory.spring.autoWire = name

      1. Spring整合Hibernate:

Spring整合Hibernate框架的时候有两种方式:

零障碍整合:(一)

可以在Spring中引入Hibernate的配置文件.

1.通过LocalSessionFactoryBean在spring中直接引用hibernate配置文件

<!-- 零障碍整合 在spring配置文件中引入hibernate的配置文件 -->

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

<property name="configLocation" value="classpath:hibernate.cfg.xml"/>

</bean>

2.Spring提供了Hibernate的模板.只需要将HibernateTemplate模板注入给DAO.

* DAO继承HibernateDaoSupport.

<!-- DAO的配置 -->

<bean id="bookDao" class="cn.itcast.dao.BookDao">

<property name="sessionFactory" ref="sessionFactory"/>

</bean>

改写DAO:继承HibernateDaoSupport类.

public class BookDao extends HibernateDaoSupport{

public void save(Book book) {

System.out.println("DAO层的保存图书...");

this.getHibernateTemplate().save(book);

}

}

  1. 创建一个映射文件 :

<hibernate-mapping>

<class name="cn.itcast.vo.Book" table="book">

<id name="id">

<generator class="native"/>

</id>

<property name="name"/>

<property name="price"/>

</class>

</hibernate-mapping>

  1. 别忘记事务管理:

事务管理器:

<!-- 管理事务 -->

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">

<property name="sessionFactory" ref="sessionFactory"/>

</bean>

  1. 注解管理事务:

<!-- 注解开启事务 -->

<tx:annotation-driven transaction-manager="transactionManager"/>

  1. 在业务层类上添加一个注解:

@Transactional

没有Hibernate配置文件的形式(二)

不需要Hibernate配置文件的方式,将Hibernate配置文件的信息直接配置到Spring中.

Hibernate配置文件中的信息 :

* 连接数据库基本参数:

* Hibernate常用属性:

* 连接池:

* 映射:

 

把Hibernate配置文件整合Spring中:

连接池:

<!-- 引入外部属性文件. -->

<context:property-placeholder location="classpath:jdbc.properties"/>

<!-- 配置c3p0连接池 -->

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">

<property name="driverClass" value="${jdbc.driver}"/>

<property name="jdbcUrl" value="${jdbc.url}"/>

<property name="user" value="${jdbc.user}"/>

<property name="password" value="${jdbc.password}"/>

</bean>

Hibernate常用属性:

<!-- 配置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>

<prop key="hibernate.connection.autocommit">false</prop>

</props>

</property>

映射

<!-- <property name="mappingResources">

<list>

<value>cn/itcast/vo/Book.hbm.xml</value>

</list>

</property> -->

<property name="mappingDirectoryLocations">

<list>

<value>classpath:cn/itcast/vo</value>

</list>

</property>

      1. HibernateTemplate的API:

 Serializable save(Object entity) :保存数据

 void update(Object entity) :修改数据

 void delete(Object entity) :删除数据

 <T> T get(Class<T> entityClass, Serializable id) :根据ID进行检索.立即检索

 <T> T load(Class<T> entityClass, Serializable id) :根据ID进行检索.延迟检索.

 List find(String queryString, Object... values) :支持HQL查询.直接返回List集合.

 List findByCriteria(DetachedCriteria criteria)   :离线条件查询.

 List findByNamedQuery(String queryName, Object... values) :命名查询的方式.

      1. OpenSessionInView:

    <!-- 开启一个OpenSessionInView拦截器:可以让session在web层开启 -->
     <filter>
         <filter-name>OpenSessionInViewFilter</filter-name>
         <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
     </filter>
     
     <filter-mapping>
         <filter-name>OpenSessionInViewFilter</filter-name>
         <url-pattern>/*</url-pattern><!-- 不能写/  ,原因暂时不懂 -->
     </filter-mapping>
    

    1. 基于注解的方式整合SSH:

导入以上工程jar包:

* 导入struts2的注解开发:

* struts2-convention-plugin-2.3.15.3.jar

* web.xml:

<!-- 配置Spring的监听器 -->

<listener>

<!-- 监听器默认加载的是WEB-INF/applicationContext.xml -->

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

<!-- 指定Spring框架的配置文件所在的位置 -->

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:applicationContext.xml</param-value>

</context-param>

<!-- 配置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>

* 创建包结构:

* 引入spring的配置文件、log4j、jdbc属性文件.

* 创建页面:

* 创建Action:

@Namespace("/")

@ParentPackage("struts-default")

public class BookAction extends ActionSupport implements ModelDriven<Book>{

private Book book = new Book();

public Book getModel() {

return book;

}

@Action(value="book_add")

public String add(){

System.out.println("web层添加图书...");

return NONE;

}

}

* Action---Service----Dao

将各层类使用注解装配Spring中:

@Controller

@Service

@@Repository

完成属性注入:

@Autowired

@Qualifier("bookService")

* 实体类:

@Entity

@Table(name="book")

public class Book {

@Id

@GeneratedValue(strategy=GenerationType.IDENTITY)

private Integer id;

@Column(name="name")

private String name;

private Double price;

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Double getPrice() {

return price;

}

public void setPrice(Double price) {

this.price = price;

}

@Override

public String toString() {

return "Book [id=" + id + ", name=" + name + ", price=" + price + "]";

}

}

* 事务管理:

1.applicationContext.xml:

    <!-- 事务管理 -->
    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactroy"/>
    </bean>
    <!-- 开启注解的事务管理 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>

2.在service中使用@Transaction

* 模板注入:

<!-- 定义hibernate模板 -->
        <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
            <property name="sessionFactory" ref="sessionFactroy"/>
        </bean>

今天内容总结:

Spring的事务管理:

* 编程式事务:(了解)

* 声明式事务:

* TransactionProxyFactoryBean.

* AOP和事务配置:(*****)

* 基于注解事务管理:(*****)

SSH整合:

* SSH整合(带有hibernate配置文件)

* 导包:

* 配置文件:

* Struts2+Spring

* 两种方式:

* Action的类由Struts框架创建.

* Action的类由Spring框架创建.(scope=”prototype”)

* Spring+Hibernate:

* 在Spring框架中引入Hibernate的配置文件.

* 管理事务:

* DAO中注入sessionFactory.

* SSH整合(不带Hibernate配置文件)

* 导包:

* 配置文件:

* Struts2+Spring

* 两种方式:

* Action的类由Struts框架创建.

* Action的类由Spring框架创建.(scope=”prototype”)

* Spring+Hibernate

* 把Hibernate配置信息配置到Spring中

* 管理事务:

* DAO中注入sessionFactory.

* SSH注解.(**)

* Struts2:

* 在Action的类上

* @Namespace(“/”)

* @ParentPackage("struts-default")

* 在要执行的方法上:

* @Action

* 把Action/Service/Dao交给Spring.

* Action:

@Controller("bookAction")

@Scope("prototype")

* Service

@Service

* Dao

@Repository

* 配置Spring中自动扫描;

<context:component-scan base-package="cn.itcast.action,cn.itcast.service,cn.itcast.dao"/>

* 映射:

@Entity

@Table(name="book")

public class Book {

@Id

@GeneratedValue(strategy=GenerationType.IDENTITY)

private Integer id;

@Column(name="name")

private String name;

...

}

* 配置SessionFactory:

<!-- 配置Hibernate的其他属性: -->

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">

<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>

<prop key="hibernate.connection.autocommit">false</prop>

</props>

</property>

<!-- 映射扫描 -->

<property name="packagesToScan">

<list>

<value>cn.itcast.vo</value>

</list>

</property>

</bean>

* 事务管理:

<!-- 事务管理器 -->

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">

<property name="sessionFactory" ref="sessionFactory"/>

</bean>

<tx:annotation-driven transaction-manager="transactionManager"/>

* DAO中使用Hibernate模板:

* 手动注入HibernateTemplate :

<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">

<property name="sessionFactory" ref="sessionFactory"/>

</bean>

* 在Dao中

@Autowired

@Qualifier("hibernateTemplate")

private HibernateTemplate hibernateTemplate;

猜你喜欢

转载自blog.csdn.net/xiaoshuo566/article/details/84066440