zoukankan      html  css  js  c++  java
  • ssm框架的总结

    ssm对应的是spring+springmvc+mybatis,

    一、spring,略。

    二、spring mvc是spring提供的mvc模块,

    从图中可以看出,springmvc的模块划分非常多,每一个模块都需要自己选择一种实现(有springmvc实现的)。

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4     xmlns:p="http://www.springframework.org/schema/p"
     5     xmlns:tx="http://www.springframework.org/schema/tx"
     6     xmlns:context="http://www.springframework.org/schema/context"
     7     xmlns:mvc="http://www.springframework.org/schema/mvc"
     8     xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
     9         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
    10         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
    11         http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
    12 
    13     <!-- 处理器映射器 ,下面使用spring提供的映射器BeanNameUrlHandlerMapping,
    14         是根据处理器的name和class属性来进行映射的,name就是url,class就是映射到的处理类
    15         这是非注解的映射器的一种
    16     -->
    17     <bean 
    18         class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
    19 
    20     <!-- 处理器适配器 :所有的适配器都实现了HandlerAdapter接口,
    21         而在适配器实现的support方法中,springmvc还要求通过该适配器适配的类必须实现指定的接口,
    22         例如下面的处理器是通过SimpleControllerHandlerAdapter进行适配的,就必须实现Controller接口
    23     -->
    24     <bean 
    25         class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
    26 
    27     <!-- 处理器 -->
    28     <bean name="/queryitems.action" class="com.dqxst.controller.ItemsContraller" />
    29 
    30     <!-- 视图解析器 :解析jsp视图,默认使用jstl标签-->
    31     <bean 
    32         class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    33         <!-- 添加前缀和后缀,在指定视图时会和参数字串进行拼合 -->
    34         <property name="prefix" value="/WEB-INF/jsp/" />
    35         <property name="suffix" value=".jsp" />
    36     </bean>
    37     
    38     <!-- 配置注解处理器适配器和映射器 ,这个是3.1之后新增的,不要使用之前的(在配置文件中的默认配置,可以被覆盖)
    39         注意:如果使用注解开发,映射器和适配器必须都使用注解型
    40     <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />
    41     <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" />
    42     -->
    43     <!-- 但是使用下面的可以替换上面的配置,并且还加载了很多参数绑定的方法,例如json转换的解析器,开发时一般使用 -->
    44     <mvc:annotation-driven></mvc:annotation-driven>
    45     
    46     <!-- 使用注解之后的组件可以单独配置,但是开发中一般使用扫描的方式
    47         这样可以扫描controller、service、Repository等组件
    48      -->
    49     <context:component-scan base-package="com.dqxst.controller"></context:component-scan>
    50 </beans>
    springmvc各模块的一些实现配置

    在图中DispatcherServlert处应该有一个Controller的存在,实际是由Controller来进行控制工作。而Controller在springmvc中(通常)是使用注解声明的,还包括了一系列的注解辅助开发。一个Controller最主要的工作就是(这对struct2也适用):

      ①接收参数然后与java中的pojo/集合等绑定。参考:http://www.cnblogs.com/HD/p/4107674.html

      ②调用相应service(业务)层进行业务处理

      ③返回处理结果数据Model和页面view。参考:http://www.cnblogs.com/xiepeixing/p/4243801.html

    参考:http://www.cnblogs.com/kreo/p/4344668.html

    mvc框架的一些常用功能:

      ①服务器端校验,就是对发送到服务器上的参数进行的校验,在注解驱动中配置。

      ②类型转换:就是将自定义的格式转换为指定的java类型,在注解驱动中配置。

      ③自定义拦截器:可以在执行链的最前端执行一些操作,例如身份验证。

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4     xmlns:p="http://www.springframework.org/schema/p"
     5     xmlns:tx="http://www.springframework.org/schema/tx"
     6     xmlns:context="http://www.springframework.org/schema/context"
     7     xmlns:mvc="http://www.springframework.org/schema/mvc"
     8     xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
     9         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
    10         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
    11         http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
    12     <context:annotation-config/>
    13     <context:component-scan base-package="com.dqxst.controller"></context:component-scan>
    14      
    15     <!-- 视图解析器 :解析jsp视图,默认使用jstl标签-->
    16     <bean 
    17         class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    18         <!-- 添加前缀和后缀,在指定视图时会和参数字串进行拼合 -->
    19         <property name="prefix" value="/WEB-INF/jsp/" />
    20         <property name="suffix" value=".jsp" />
    21     </bean>
    22     
    23     <!-- 注解驱动 ,conversion-service属性用于设置自定义的参数绑定,通过一个bean实现-->
    24     <mvc:annotation-driven conversion-service="conversionService" validator="validator" ></mvc:annotation-driven>
    25     <!-- 转换器bean -->
    26     <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
    27         <!-- 指定转换器类list -->
    28         <property name="converters">
    29             <list>
    30             <!-- 日期格式转换器 -->
    31                 <bean class="com.dqxst.converters.DateConverter" />
    32             </list>
    33         </property>
    34     </bean>
    35     
    36     <!-- 配置服务器端校验器 -->
    37     <bean id="validator"
    38         class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
    39         <!-- 校验器-->
    40         <property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
    41         <!-- 指定校验使用的资源文件,如果不指定则默认使用classpath下的ValidationMessages.properties -->
    42         <property name="validationMessageSource" ref="messageSource" />
    43     </bean>
    44     <!-- 校验错误信息配置文件 -->
    45     <bean id="messageSource"
    46         class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    47         <!-- 资源文件名-->
    48         <property name="basenames">   
    49             <list>    
    50             <value>classpath:CustomValidationMessages</value> 
    51             </list>   
    52         </property>
    53         <!-- 资源文件编码格式 -->
    54         <property name="fileEncodings" value="utf-8" />
    55         <!-- 对资源文件内容缓存时间,单位秒 -->
    56         <property name="cacheSeconds" value="120" />
    57     </bean>
    58     
    59     <!-- 全局异常处理器,由springmvc自动管理,只需要实现HandlerExceptionResolver接口即可,只能有一个起效 -->
    60     <bean class="com.dqxst.exception.CustomExceptionResolvar" />
    61     
    62     <!-- 文件上传解析器 -->
    63     <bean id="multipartResolver"
    64         class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    65         <!-- 设置上传文件的最大尺寸为5MB -->
    66         <property name="maxUploadSize">
    67             <value>5242880</value>
    68         </property>
    69     </bean>
    70     
    71     <!--拦截器,全局 -->
    72     <mvc:interceptors>
    73         <!--多个拦截器,顺序执行 -->
    74         <!-- 登陆认证拦截器 -->
    75         <mvc:interceptor>
    76             <mvc:mapping path="/**"/>
    77             <bean class="com.dqxst.interceptor.LoginInterceptor"></bean>
    78         </mvc:interceptor>
    79         <mvc:interceptor>
    80             <!-- /**表示所有url包括子url路径 -->
    81             <mvc:mapping path="/**"/>
    82             <bean class="com.dqxst.interceptor.HandlerInterceptor1"></bean>
    83         </mvc:interceptor>
    84         <mvc:interceptor>
    85             <mvc:mapping path="/**"/>
    86             <bean class="com.dqxst.interceptor.HandlerInterceptor2"></bean>
    87         </mvc:interceptor>
    88     </mvc:interceptors>
    89     
    90     <!-- 静态资源解析,包括 :js、css、img等-->
    91      <mvc:resources location="/js/" mapping="/js/**"/>
    92      <mvc:resources location="/img/" mapping="/img/**"/>
    93 </beans>
    最常用的配置形式

    三、mybatis是另一种ORM框架,不同于hibernate,使用步骤:

      ①底层配置文件:连接数据库,加载sql语句配置文件,其他配置

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE configuration
     3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
     4 "http://mybatis.org/dtd/mybatis-3-config.dtd">
     5 <configuration>
     6     <!-- 加载其他配置文件,默认为类路径 -->
     7     <properties resource="db.properties"></properties>
     8     
     9     <!-- 配置别名简化使用 -->
    10     <typeAliases>
    11         <!-- 单个别名
    12         <typeAlias type="com.dqxst.domain.User" alias="user"/>
    13          -->
    14          <!-- 批量别名,别名为类名首字母小写 -->
    15         <package name="com.dqxst.domain"/>
    16     </typeAliases>
    17     
    18     <!-- 配置mybatis数据库环境 -->
    19     <environments default="development">
    20         <environment id="development">
    21             <transactionManager type="JDBC"/>
    22             <dataSource type="POOLED">
    23                 <property name="driver" value="${jdbc.driver}"/>
    24                 <property name="url" value="${jdbc.url}"/>
    25                 <property name="username" value="${jdbc.username}"/>
    26                 <property name="password" value="${jdbc.password}"/>
    27             </dataSource>
    28         </environment>
    29     </environments>
    30     
    31     <!-- 加载映射文件 -->
    32     <mappers>
    33         <!-- 单个问价加载 
    34         <mapper resource="sqlMap/User.xml"/>
    35         <mapper resource="mapper/UserMapper.xml"/>
    36         -->
    37         <!-- 批量文件加载:需要满足几个条件
    38             1、使用mapper代理开发
    39             2、mapper接口和配置文件同名且在同一目录下
    40          -->
    41          <package name="com.dqxst.mapper"/>
    42          <package name="com.dqxst.mapper2"/>
    43     </mappers>
    44 </configuration>
    mybatis底层配置

      ②配置sql语句文件,这是和hibernate的一个重要不同点:需要自己写sql语句,推荐使用mapper接口开发规范(规范使用一定限制的配置文件和使用mapper接口替代的DAO接口配合开发)。参考:http://dejazhan.iteye.com/blog/1693516

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE mapper
     3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     5 <!-- 这是一个简单的配置文件 -->
     6 <mapper namespace="test">
     7     <!-- 配置一个select语句,
     8         namespace.id是要用在程序中对应这条语句的
     9         parameterType:指定占位符对应参数的类型。
    10         !!!注意这里的占位符是#{xxx},xxx可以是value或其他字符
    11         resultType:指定返回结果的类型
    12      -->
    13     <select id="findUserById" parameterType="int" resultType="com.dqxst.domain.User">
    14         SELECT * FROM user WHERE id = #{id}
    15     </select>
    16     
    17     <!-- 注意:
    18         1、即使返回多条记录, resultType也是表示单条记录的类型而不是list
    19         2、${xxx}拼接符:将参数不加修饰的和语句拼接成一句,像下面就可以用于模糊查询,不再使用?做占位符
    20         拼接字符串有一个问题,就是sql注入。
    21         !!!注意如果注入简单类型,这里的xxx只能使用value
    22     -->
    23     <select id="findUserByName" parameterType="java.lang.String" resultType="com.dqxst.domain.User">
    24         SELECT * FROM user WHERE username like '%${value}%'
    25     </select>
    26     
    27     <!--添加:因为添加的字段类型和pojo中的一样,所以 parameterType需要时pojo的类型,
    28         而他们参数的具体类型,只要使用#{xxx},其中xxx是对于的pojo中的属性即可自动判断类型
    29         
    30         selectKey就是在insert之后添加执行语句,下面是在insert之后执行,可以获取当前id值赋给pojo对象用于后续操作
    31         !!!注意上面是用于获取自增型主键的 id
    32         还可以在insert之前使用select uuid()获取非自增型主键的值
    33      -->
    34     <insert id="insertUser" parameterType="com.dqxst.domain.User">
    35         <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
    36             SELECT LAST_INSERT_ID()
    37         </selectKey>
    38         INSERT INTO user(username,birthday,sex,address) value(#{username},#{birthday},#{sex},#{address})
    39     </insert>
    40     
    41     <!-- 删除 -->
    42     <delete id="deleteUser" parameterType="java.lang.Integer">
    43         DELETE FROM user WHERE id=#{id}
    44     </delete>
    45     
    46     <!-- 更新 -->
    47     <update id="updateUser" parameterType="com.dqxst.domain.User">
    48         UPDATE user SET username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} WHERE id=#{id}
    49     </update>
    50 </mapper>
    普通sql配置
     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE mapper
     3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     5 <!-- 这是一个使用mapper接口开发的配置文件,有一些规范:
     6     1、namespace是对应mapper接口全限定名
     7     2、下面的语句要和对应mapper接口中的方法对应,id==>方法名,parameterType==>参数类型,
     8         resultType==>返回值类型
     9  -->
    10 <mapper namespace="com.dqxst.mapper.UserMapper">
    11     <!-- 配置一个select语句-->
    12     <select id="findUserById" parameterType="int" resultType="user">
    13         SELECT * FROM user WHERE id = #{id}
    14     </select>
    15     <select id="findUserByName" parameterType="java.lang.String" resultType="com.dqxst.domain.User">
    16         SELECT * FROM user WHERE username like '%${value}%'
    17     </select>
    18     
    19     <!--添加-->
    20     <insert id="insertUser" parameterType="com.dqxst.domain.User">
    21         <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
    22             SELECT LAST_INSERT_ID()
    23         </selectKey>
    24         INSERT INTO user(username,birthday,sex,address) value(#{username},#{birthday},#{sex},#{address})
    25     </insert>
    26     
    27     <!-- 删除 -->
    28     <delete id="deleteUser" parameterType="java.lang.Integer">
    29         DELETE FROM user WHERE id=#{id}
    30     </delete>
    31     
    32     <!-- 更新 -->
    33     <update id="updateUser" parameterType="com.dqxst.domain.User">
    34         UPDATE user SET username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} WHERE id=#{id}
    35     </update>
    36     
    37     
    38     <!-- 优化应用: 
    39         1、where语句的快速拼接,在where节点中使用if节点包含多条判断之后添加的语句
    40         2、可以将一部分常用的语句构成sql片段,通过id进行引用
    41     -->
    42     <select id="findUserBySexAndName" parameterType="user" resultType="user">
    43         <!-- SELECT * FROM user WHERE sex=#{sex} AND username like '%${username}%' -->
    44         SELECT * FROM user
    45         <where>
    46             <include refid="query_user_where"></include>
    47         </where>
    48     </select>
    49     
    50     <sql id="query_user_where">
    51         <if test="sex!=''">
    52             AND sex=#{sex} 
    53         </if>
    54         <if test="username!=''">
    55             AND username like '%${username}%'
    56         </if>
    57     </sql>
    58     
    59 </mapper>
    mapper开发配置实例

    在配置中有两个重要的映射:

      ①输入映射:就是在条件语句中的参数,在配置文件中用占位符表示,在实际的DAO层就是普通的参数传递。

      ②输出映射:就是将查询结果映射到指定的pojo类中

    在使用时,mybatis需要获取SqlSessionFactory对象和SqlSession对象,通过SqlSession对象进行实际的操作。

    参考:http://blog.csdn.net/rootsuper/article/details/8537498

    四、ssm框架整合:

      ①spring和springmvc整合,无需整合,但是需要添加响应的jar包,并将springmvc使用的DispatcherServlet注册到web.xml上

      ②spring和mybatis整合:

        1、使用spring管理sqlSessionFactory对象,也就是数据库的连接

        2、使用spring管理mapper接口并且自动生成实现类,一般使用批量扫描实现。

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans
     3     xmlns="http://www.springframework.org/schema/beans"
     4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     5     xmlns:p="http://www.springframework.org/schema/p"
     6     xmlns:aop="http://www.springframework.org/schema/aop" 
     7     xmlns:context="http://www.springframework.org/schema/context"
     8     xsi:schemaLocation="http://www.springframework.org/schema/beans 
     9         http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
    10          http://www.springframework.org/schema/aop 
    11          http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
    12         http://www.springframework.org/schema/context
    13         http://www.springframework.org/schema/context/spring-context-3.1.xsd">
    14     <context:annotation-config/>
    15     <context:component-scan base-package="com.dqxst"></context:component-scan>
    16     <context:property-placeholder location="classpath:db.properties"/>
    17     
    18     <!-- 配置 SqlSessionFactory-->
    19     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    20         <!-- 加载配置文件 -->
    21         <property name="configLocation" value="classpath:mybatis/sqlMapConfig.xml"></property>
    22         <!--  -->
    23         <property name="dataSource" ref="dataSource"></property>
    24     </bean>
    25     
    26     <!-- 配置数据源 -->
    27     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    28         <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
    29         <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/mybatis"></property>
    30         <property name="user" value="root"></property>
    31         <property name="password" value="920346"></property>
    32         <property name="initialPoolSize" value="10"></property>
    33         <property name="maxPoolSize" value="30"></property>
    34     </bean>
    35      
    36     <!-- 这个类是对mapper接口进行自动扫描的类 -->
    37     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    38         <!-- 指定扫描包名,如需扫描多包,用,分隔即可 -->
    39         <property name="basePackage" value="com.dqxst.mapper" />
    40         <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
    41     </bean>
    42 </beans>
    spring和mybatis整合配置

    五、框架对比:

    struct2与springmvc对比:

  • 相关阅读:
    素数回文 ---- 有点暴力.....
    Manacher算法 , 实例 详解 . NYOJ 最长回文
    大数处理 详解 模版
    River Crossing 简单的动态规划 .
    hdu
    产生冠军 map 的 应用 .
    MySQL的数据库备份与恢复。
    rsync的相关使用,参数设置。
    centos与mac安装python虚拟环境 virtualenvwrapper
    CentOS7安装Python3.7
  • 原文地址:https://www.cnblogs.com/songfeilong2325/p/4814832.html
Copyright © 2011-2022 走看看