Spring-SSM的整合(上)

简介: Spring-SSM的整合(上)

SSM整合到底整合什么?

1、spring和mybaits整合(数据源》sessionFactory》session)

2、spirng和springMVC整合

为什么要整合到一起?

统一指挥、让两个框架中用到的类和对象,都让spring管理。好处:无缝衔接、用到spring提供的很多工具。

由谁来整合?

mybatis的主配置文件

spring的配置文件

springMVC的配置文件

web.xml

、mybatis配置文件

这个文件中没有必须添加的内容。因为他的主要内容:数据源连接信息和子配置文件Mapper信息都会在Spring的配置文件中体现

但是我们一般配置以下内容

<configuration>
    <!--配置mybatis的log实现为LOG4J-->
    <settings>
        <setting name="logImpl" value="LOG4J"></setting>
    </settings>
</configuration>

、SpringMVC配置文件

这个配置文件的内容要怎么记忆?首先我们要清楚SpringMVC的作用是什么。因为SpringMVC就是用来做页面之间的跳转和数据传递的。所以它的主配置文件的内容都是和这两方面相关的。

另外SpringMVC是Spring的一个子框架 ,所以SpringMVC和Spring之间不需要整合

<!--扫描业务逻辑层的注解-->
    <context:component-scan base-package="xinmiao.controller,xinmiao.service"></context:component-scan>
    <mvc:annotation-driven>
        <mvc:message-converters>
            <!-- 这是一个消息转换器 如果返回的值是文本类型的 解决控制层到视图层的中文乱码问题-->
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>application/json;charset=UTF-8</value>
                        <value>text/html;charset=UTF-8</value>
                    </list>
                </property>
            </bean>
            <!-- 这是一个消息转换器 如果返回的是实体类或者集合 解决控制层到视图层的中文乱码问题-->
            <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>text/html;charset=UTF-8</value>
                        <value>application/json</value>
                    </list>
                </property>
                <property name="features">
                    <list>
                        <!-- Date的日期转换器 -->
                        <value>WriteDateUseDateFormat</value>
                    </list>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>
<!--    配置多视图解析管理器-->
    <bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
<!--        是否启用format参数支持,默认为true-->
        <property name="favorParameter" value="true"/>
<!--        是否支持.html,.json,.xml等扩展名,默认为true-->
        <property name="favorPathExtension" value="true"/>
<!--        默认ContentType-->
        <property name="defaultContentType" value="text/html"/>
<!--        配置映射关系-->
        <property name="mediaTypes">
            <value>
                json=application/json
                xml=application/xml
                html=text/html
            </value>
        </property>
    </bean>
<!--    View解析定义,内容协商视图解析器;根据contentNegotiationManager使用的不同mediaTypes 决定不同的view进行响应 默认使用-->
    <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<!--        内容协商管理器 用于决定media type-->
        <property name="contentNegotiationManager" ref="contentNegotiationManager"/>
<!--        默认视图-->
        <property name="defaultViews">
            <list>
                <bean class="com.alibaba.fastjson.support.spring.FastJsonJsonView">
                    <property name="charset" value="UTF-8"/>
                </bean>
            </list>
        </property>
        <property name="viewResolvers">
            <list>
                <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                    <property name="prefix" value="/WEB-INF/jsp/"/>
                    <property name="suffix" value=""/>
                </bean>
            </list>
        </property>
    </bean>
<!--    解决静态资源加载的问题-->
    <mvc:resources mapping="/static/**" location="/static/"></mvc:resources>
    <!-- 配置MultipartResolver,用于上传文件,使用spring的CommonsMultipartResolver -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="5000000"/>
        <property name="defaultEncoding" value="UTF-8"/>
    </bean>

三、spring的配置文件

之前我们已经明白了,spirngMVC不需要spring刻意的去整合,所以spirng中最主要的内容就是整合mybatis。那mybatis我们到底是要整合哪些内容呢?

首先我们要明白mybatis的最根本的目的是要执行sql语句。而sql语句写在Mapper子配置文件中,sql语句最终要再数据库中执行,并且有些sql是需要有事务管理的。

所以spring中首先要把数据源管理起来,还需要把mybaits的主配置文件和子配置文件Mapper管理起来,管理这两样用的Ioc。

接下来我们需要使用AOP在业务逻辑层切入自带的事务管理器。

最后就是把业务逻辑层的bean也加入进来。

<!-- 加载属性文件-->
    <context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>
    <!--此数据源可以替换-->
    <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${driver}"></property>
        <property name="url" value="${url}"></property>
        <property name="username" value="${user}"></property>
        <property name="password" value="${pwd}"></property>
    </bean>
    <!--整合sqlSessionfactory 包涵了数据源(dataSource)配置文件(config)和映射文件(mapper)-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" >
        <property name="dataSource" ref="dataSource"></property> <!--数据源-->
        <property name="configLocation" value="classpath:mybatis.xml"></property>  <!--配置文件-->
        <property name="mapperLocations" value="classpath:mappers/*.xml"></property>  <!--映射文件-->
    </bean>
    <!--扫描mapper接口-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="xinmiao.mapper"></property>
    </bean>
    <!--扫描业务逻辑层的注解-->
    <context:component-scan base-package="xinmiao"></context:component-scan>
    <!--添加声明式的事务管理器  管理指定的数据源-->
    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    <!--把事务管理器,变成增强(通知),同时指定了方法的事务传播机制-->
    <tx:advice id="txAdvice" transaction-manager="txManager">
        <tx:attributes>
            <tx:method name="add*" propagation="REQUIRED"/>
            <tx:method name="update*" propagation="REQUIRED"/>
            <tx:method name="del*" propagation="REQUIRED"/>
            <tx:method name="get*" propagation="REQUIRED" read-only="true"/>
        </tx:attributes>
    </tx:advice>
    <aop:config>
        <aop:pointcut id="servicePointcut" expression="execution(* xinmiao.service.*.*(..))"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="servicePointcut"></aop:advisor>
    </aop:config>
    <import resource="springmvc.xml"></import>

四、web.xml配置文件

上面我们配置好了三个框架,框架配置的再好,也得有初始化的地方。自然初始化的地方就是在web.xml中。

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
      http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springContext.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
  <filter>
    <filter-name>encodingFilter</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>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>


相关文章
|
机器学习/深度学习 C++
前缀和——OJ题(二)
前缀和——OJ题(二)
101 0
|
6月前
|
监控 Cloud Native 数据挖掘
《DeepSeek牵手云原生,流量管理玩出新高度》
在数字化浪潮中,流量管理成为企业竞争力的关键。DeepSeek借助云原生技术,通过容器化、微服务架构、智能路由、动态服务发现与自适应伸缩等手段,实现高效稳定的智能流量管理。实时监控与数据分析优化策略,确保服务的高可用性和用户体验,使DeepSeek在激烈的市场竞争中脱颖而出,为用户提供卓越的人工智能服务。
133 12
2023年电赛---运动目标控制与自动追踪系统(E题)OpenART mini的代码移植到OpenMV
2023年电赛---运动目标控制与自动追踪系统(E题)OpenART mini的代码移植到OpenMV
372 0
|
安全 前端开发 Java
89.【SpringBoot-02】(五)
89.【SpringBoot-02】
101 0
|
算法 Java UED
jvm之垃圾收集器分类 性能指标及发展历史解读
jvm之垃圾收集器分类 性能指标及发展历史解读
|
弹性计算 NoSQL 关系型数据库
泼天的富贵呀!阿里云降价了,中小企业你就说你接不接?
泼天的富贵呀!阿里云降价了,中小企业你就说你接不接?2024年最新阿里云降价,立即生效!百款产品直降,平均降幅20%,阿里云希望通过此次大规模降价,让更多企业和开发者用上先进的公共云服务,加速云计算在中国各行各业的普及和发展。这次降价包括云服务器ECS、对象存储OSS、云数据库都降价了,真降价,直降价:百款产品直降,平均降幅20%,阿里云百科分享阿里云2024年降价信息汇总表
UE4 游戏暂停功能的蓝图调用
UE4 游戏暂停功能的蓝图调用
187 0
UE4 游戏暂停功能的蓝图调用
|
存储 编译器 C语言
掌握指针和数组:经典笔试题攻略(万字详解)(下)
掌握指针和数组:经典笔试题攻略(万字详解)(下)
177 0
|
供应链 5G
淘宝直播,购物的温度
用势如破竹来形容淘宝直播,并不夸张:短短3年,它创造了一个千亿级的新产业,2018年,淘宝直播整体带货规模达千亿,平台每天直播场次超6万场,涌现出81位年成交破亿的主播。
238 0
淘宝直播,购物的温度

热门文章

最新文章