SSM框架整合

Posted yifachen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SSM框架整合相关的知识,希望对你有一定的参考价值。

一、创建一个maven的web项目,导入相关的依赖jar包

 

二、预先搭建好springmvc的框架,这里要创建一个springmvc.xml的配置文件,这个配置文件中

   1.先开启扫描,让他扫描controller的注解@controller,可以设置只扫描这个控制器注解,

   2.开启spring对mvc的支持,就是配置映射器和适配器

   3.配置视图解析器

    4.配置过滤掉静态资源

springmvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation=" http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">


    <!--配置扫描器  只扫描控制器controller-->
    <context:component-scan base-package="com.music">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

    <!--配置视图解析器-->

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
        <property name="prefix" value="/WEB_INF/jsp"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

    <!--过滤静态资源-->
    <!--<mvc:resources mapping="/js/**" location="/js/"></mvc:resources>
   <mvc:resources mapping="/css/**" location="/css/"></mvc:resources>
    <mvc:resources mapping="/images/**" location="/images/"></mvc:resources>-->
    <!--开启spring对springmvc的支持-->
     <mvc:annotation-driven></mvc:annotation-driven>
</beans>

三、配置web.xml文件

  这里先配置就是说springmvc框架所需要的,dispacherServlet的一个前端控制器,还需要把之前我们配置 的springmvc .xml文件加载进来让我们配置的扫描器能够扫描起到作用,如果有需要的话还要对我们的传输的数据进行编码格式的过滤,就需要再我们添加的控制器的上边再加上一个过滤器,(为什么要在上边呢,因为web.xml文件好像有规定这些配置的位置防止先后的顺序)

springmvc.xml

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>

  <!--解决中文乱码的 过滤器  监听器要在上边-->
  <filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <!--配置前端控制器-->
  <servlet>
    <servlet-name>DispatcherServlet</servlet-name>

    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--加载指定的配置文件springmvc.xml-->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>DispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>


</web-app>

注:这里可以正常的测试一下,简单的写几页面,让它能在控制器的作用下正常的跳转就说明,这个框架搭建的没有问题

三、搭建一个mybatis的框架

  正常来说,mybatis的框架我们需要编写mybatis-config.xml文件,如果要使用xml配置的形式就还需要配置,映射的xml文件,注解的会就不用了,后边会说他们的区别,我们的mybatis文件的配置,

  1.我们需要先配置一个配置文件,然后再把这个配置文件用properties标签加载到我们的这个mybatis文件当中,配置全局映射的级别和开启缓存,下边可以配置实体类的别名,在下边就是配置上给们的数据库的连接的环境,事务的级别,要不要 使用连接池,用mappers标签来配置我们的映射文件,这个文件在后边的整合spring的时候就不需要了,所以我们就在这强掉一下mappers中有几个属性的使用区别

<mapper resource="mapper/demo01/FoodMapper.xml"/>    相对路径进行配置
<mapper class="cn.et.demo02.mapper.FoodMapper"/>  使用接口的信息进行配置
<!--<package name="mapper.demo01"/>-->   使用接口所在的包进行配置
 
这里也进行一个小的测试,如果测试可以连接上数据库 就说明我们的mybatis的框架搭建完成,
  四、接下来我们就说整合spring框架和mybatis的框架,
  在整合之中我们就把上述的mybatis-config.xml的文件弃之不用了,我们把所有的配置全部都放在applicationContext。xml的文件中来
  1.我们先配置开启扫描器,让他去扫描我们的dao层和service层,可以配置忽略我们的控制器controller,
  2.配置我们的数据库连接池,
  3.配置我们的sqlsessionfactory,将我们的数据库连接池注入我们的是SQL sessionfactory
  4.配置我们的扫描dao的接口,这里要说明一下上边我们说的xml和注解的不同方式,如果你的xml的文件路径和dao的接口一致的话,就直接正常配置就行了,如果不一致的话,就要在我们的SQL sessionfactory中配置一下映射文件的路径
applicationContext。xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx.xsd">

    <!--配置扫描器  但是只让他扫描service层和dao层 无需扫描注解-->
    <context:component-scan base-package="com.music">
        <!--exclude不扫描-->
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>



    <!--整合mybatia和spring-->
    <!--配置连接池-->
    <!--配置数据源 DriverManagerDataSource -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql:///song?serverTimezone=GMT%2B8"></property>
        <property name="username" value="root"></property>
        <property name="password" value="root"></property>
    </bean>
    <!--配置sqlsessionFactory的工厂-->
    <bean class="org.mybatis.spring.SqlSessionFactoryBean" id="factoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <!-- ****************目录不一致的情况 要在这里添加这没一条配置******************************************** -->
        <!-- *通配符来匹配 **任意文件夹下的 *任意以xml结尾的文件 -->
       <!-- <property name="mapperLocations" value="classpath:com/music/**/*.xml"></property>-->
        <!-- ************************************************************ -->
    </bean>
    <!--配置dao下的接口 扫描 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer" id="MapperScannerConfig">
        <property name="basePackage" value="com.music.dao"></property>
    </bean>
   </beans>

这样还不算完,因为此时我们的applicationcontext。xml文件仍然没有和我们的整个spring的框架整合起来,没有任何的东西将我们配置的文件加载到web容器中,

所以我们就需要考虑如何将我们的文件加载进来呢?我们可以通过一个sevletcontext的域对象来加载,因为这个域对象的生命周期和我们的服务器的生命周期一致,

我们可以通过他的init的方法来配置加载我们的文件,所以我们呢要在web。xml文件中监听这个对象的创建,

web。xml文件修改如下

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>

  <!--设置配置文件的路径-->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>

  <!--解决中文乱码的 过滤器  监听器要在上边-->
  <filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>


  <!--配置spring的监听器  这个监听器他默认就只加载WEB_INF下的applicationContest.xml的文件-->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>


  <!--配置前端控制器-->
  <servlet>
    <servlet-name>DispatcherServlet</servlet-name>

    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--加载指定的配置文件springmvc.xml-->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>DispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>


</web-app>

 

此时我们就就将三个框架整合差不多了,就差个事务的控制,我们一鼓作气,配完它!!!

我们就只需要在applicationContext。xml文件中去加上事务的控制就欧克了

1.开启一个事务管理器

2.配置这个事务的管理器通知

3.织入事务到代码中

添加如下的代码

    <!--配置spring框架声明式事务处理-->
    <bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="transactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    <!--配置事务通知-->
    <tx:advice id="txadvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="find*" read-only="true" propagation="REQUIRED"/>
        </tx:attributes>
    </tx:advice>
    <!--织入事务-->
    <aop:config>
        <aop:pointcut id="txpoint" expression="execution(* com.music.service.Impl.*.*(..))"/>
        <aop:advisor advice-ref="txadvice" pointcut-ref="txpoint"></aop:advisor>
    </aop:config>

 

 

编写一个查询和保存的功能测试一下,这就初步完成了ssm框架的整合,

开心

高兴

nice

2333

以上是关于SSM框架整合的主要内容,如果未能解决你的问题,请参考以下文章

SSM 项目整合详细解读

520前,我放弃陪女朋友时间,被迫写代码:“SSM框架整合+excel文件上传到数据库+数据更新“

SSM框架整合

Java EE互联网轻量级框架整合开发— SSM框架(中文版带书签)原书代码

手把手整合SSM框架

黑马程序员最全SSM框架用户角色案例(SSM整合版)