SSM框架整合总结

来源:互联网 发布:mac docker vs pd 编辑:程序博客网 时间:2024/06/04 21:40

关于ssm整合的相关总结:

spring + springMVC + mybatis

1.持久层--->mybatis:通过Spring 来管理持久层的 Mapper (相当于 dao 接口),来完成对数据库的操作。

首先我们回顾一下,在单独使用mybatis的时候,在其配置文件中有哪些必须的配置!
①mybatis.xml全局配置文件
由于该核心配置文件是用来操作底层数据库的,故而必须会有一些登陆数据库、事务控制等操作的相关配置。

a.配置连接数据库的数据源DataSource--->(包括连接数据的url,driver,username,password等等)
b.配置操作数据库的事务控制TransactionManager--->(例如:<transactionManager type="JDBC" />)
c.连接mapper.xml配置文件--->(例如:<mapper resource="...... "/>)
d.配置sqlSessionFactory---->(为何我要将sqlSessionFactory写在这里呢?因为我们在单独使用mybatis的时候,是单独创建该对象的。
代码如下所示:
        String resource = "mapper.xml";
        Reader reader = Resources.getResourceAsReader(resource);
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(reader);
由 sqlSessionFactory 创建 sqlSession ,再有 sqlSession 操作数据库发出SQL进行 CURD,但是我们知道,在进行 spring 与 mybatis 整合的时候,这种使用“new”来创建对象的方法将不再符合 spring 框架的思想了!)


②mapper.xml映射配置文件
该配置文件主要是配置SQL映射语句。其中包括简单关系与复杂关系。
比较常用的关系配置如下:
a.简单配置
<resultMap type="" id="">
        <id  property=""  column="" />        //主键配置
        <result  property=""  column="" />    //其它非主键配置
        <result  property=""  column="" />    
        ......
</resultMap>

b.一对一关系:
<resultMap type="" id="" extends="">
    <association property="" javaType="">    //注意它使用的是“javaType”
        <id  property=""  column="" />        
        <result  property=""  column="" />
        <result  property=""  column="" />    
        ......    
    </association>
</resultMap>

b.一对多关系:
<resultMap type="" id="" extends="">
    <collection property="" ofType="">        //注意它使用的是“ofType”
        <id  property=""  column="" />        
        <result  property=""  column="" />  
        <result  property=""  column="" />    
        ......  
    </collection>
</resultMap>



2.业务层--->spring:通过Spring 来管理业务层的 service (通过调用 mapper 接口),通过spring的IOC和DI来实现完全的面向接口编程,降低类之间的耦合,并且使用spring AOP来控制事务处理。

使用比较多的是包的自动扫描,与自动注入。配合@Autowired @Resource @component @Repository @Service @Controller注解的使用。


3.表现层--->springMVC:通过Spring 来管理表现层的 Handler (通过调用 Service 接口),来实现流程跳转的控制。

由于springMVC是springframework 框架的组成部分,故而,只要配置其本身所需要的配置即可。那么springMVC有哪些本身需要的配置呢?
由springMVC 运行的流程控制图中我们可以看到其中几个比较重要的“器”,它是我们配置的关键。
①前端控制处理器--->DispatcherServlet
它是springMVC运行的中央控制器,在web.xml中配置。它的作用是指定springMVC配置文件的位置,并在serlet-mapping中指定过滤条件(一种是“/”,一种类似“*.action”)
例如下:
<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <description>加载/WEB-INF/spring-mvc/目录下的所有XML作为Spring MVC的配置文件</description>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring-mvc/*.xml</param-value>
<!-- 若我们要实现加载所有在“类路径”目录下的文件,则需要在其前面加classpath。则上面可以写成:
        <param-value>classpath:/spring-mvc/*.xml</param-value>
-->
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>*.html</url-pattern>
</servlet-mapping>

②处理器映射器--->HandlerMapping(处理器映射器的功用是根据请求的url查找Hanler)
之前使用的标签为:<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
之后,HandlerMapping 与 HandlerAdapter合并为一个功能更为强大的标签:
mvc注解驱动 <mvc:annotation-driven></mvc:annotation-driven>。虽然他们两个已经合并,可是我们需要知道,有些功能其实在本质上还是由HandlerMapping来实现的,譬如说在springMVC中实现拦截器。

③处理器适配器--->HandlerAdapter(处理器适配器的作用是按照特定的规则去执行Handler)
同处理器映射器一样,处理器适配器总是与之一起配对出现。而如今它已经被“MVC注解驱动”<mvc:annotation-driven></mvc:annotation-driven>标签所替代,但是我们都知道,有关于”参数绑定“与“Validation校验”这些功能的实现都与HandlerAdapter相关联的。


④处理器--->Handler
@Controller注解 与 @RequestMapping() 注解
 由于注解开发带来越来越多的便利,大家都越来越习惯与这种简介便利的开发方式。
使用注解开发,自然需要让spring容器能扫描到该注解,这样才能识别出相应的“Handler”。使用spring的包自动扫描标签:
<context:component-scan base-package="com.minx.crm.web.controller"/>
有时候也可以在其中添加过滤条件,使其效率更高:
<context:component-scan base-package="com.controller"  use-default-filters="false"/>
 <!-- 注意:若使用include-filter去定制扫描内容,要在use-default-filters="false"的情况下,不然会“失效”,被默认的过滤机制所覆盖。-->                   
            <!-- annotation是对注解进行扫描 -->
            <context:include-filter type="annotation" expression="org.springframework.stereotype.Component"/>
            <!-- assignable是对类或接口进行扫描 -->
            <context:include-filter type="assignable" expression="com.wjx.betalot.performer.Performer"/>
             <context:include-filter type="regex" expression="com.baobaotao.service..*"/>
<!-- 注意:在use-default-filters="false"的情况下,exclude-filter是针对include-filter里的内容进行排除 -->
            <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
            <context:exclude-filter type="assignable" expression="com.wjx.betalot.performer.impl.RainPoem"/>
            <context:exclude-filter type="regex" expression=".service.*"/>
</context:component-scan>    


⑤视图解析器--->ViewResolver
由于springmvc支持多种视图(例如jsp、pdf、excel、freemark...)故而需要视图解析器来根据逻辑视图名来进行解析。
例如下配置可以实现对视图名前缀后缀的自动解析:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" prefix="/jsp/" suffix=".jsp" />


——————————————————————————————————————————————————————
分析完上面各自独立的部分,那么我们来看看哪些部分可以实现整合。

1.持久层--->mybatis:

①mybatis.xml全局配置文件
a.配置连接数据库的数据源DataSource--->显然spring也可以实现该配置,故而可以交给spring来管理。
b.配置操作数据库的事务控制TransactionManager--->spring可以实现
c.连接mapper.xml配置文件--->若使用mybatis的注解开发,则该配置也可以省略,但是若涉及复杂的SQL语句,则注解开发并不能达到很好的效果,则对复杂类型的SQL,我们建议使用xml开发,故而,在实际的开发中最好对两者进行配合使用。
d.配置sqlSessionFactory---->可以让spring将sqlSessionFactory自动注入容器即可。

②mapper.xml映射配置文件
该文件视需求而定,若使用mybatis的注解,则该文件可以省略。而若使用xml文件开发,则需要对其进行配置。


2.业务层--->spring:

本身是spring框架,配置无需改动。


3.表现层--->springMVC:

springmvc是springframework的一部分,故而配置无需改动。


由此我们可见,改动最大部分来自与mybatis与spring的整合部分。


////end
0 0