ssm对应的是spring+springmvc+mybatis,

一、spring,略。

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

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

 <?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:p="http://www.springframework.org/schema/p"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <!-- 处理器映射器 ,下面使用spring提供的映射器BeanNameUrlHandlerMapping,
是根据处理器的name和class属性来进行映射的,name就是url,class就是映射到的处理类
这是非注解的映射器的一种
-->
<bean
class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" /> <!-- 处理器适配器 :所有的适配器都实现了HandlerAdapter接口,
而在适配器实现的support方法中,springmvc还要求通过该适配器适配的类必须实现指定的接口,
例如下面的处理器是通过SimpleControllerHandlerAdapter进行适配的,就必须实现Controller接口
-->
<bean
class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" /> <!-- 处理器 -->
<bean name="/queryitems.action" class="com.dqxst.controller.ItemsContraller" /> <!-- 视图解析器 :解析jsp视图,默认使用jstl标签-->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 添加前缀和后缀,在指定视图时会和参数字串进行拼合 -->
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean> <!-- 配置注解处理器适配器和映射器 ,这个是3.1之后新增的,不要使用之前的(在配置文件中的默认配置,可以被覆盖)
注意:如果使用注解开发,映射器和适配器必须都使用注解型
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" />
-->
<!-- 但是使用下面的可以替换上面的配置,并且还加载了很多参数绑定的方法,例如json转换的解析器,开发时一般使用 -->
<mvc:annotation-driven></mvc:annotation-driven> <!-- 使用注解之后的组件可以单独配置,但是开发中一般使用扫描的方式
这样可以扫描controller、service、Repository等组件
-->
<context:component-scan base-package="com.dqxst.controller"></context:component-scan>
</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类型,在注解驱动中配置。

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

 <?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:p="http://www.springframework.org/schema/p"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<context:annotation-config/>
<context:component-scan base-package="com.dqxst.controller"></context:component-scan> <!-- 视图解析器 :解析jsp视图,默认使用jstl标签-->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 添加前缀和后缀,在指定视图时会和参数字串进行拼合 -->
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean> <!-- 注解驱动 ,conversion-service属性用于设置自定义的参数绑定,通过一个bean实现-->
<mvc:annotation-driven conversion-service="conversionService" validator="validator" ></mvc:annotation-driven>
<!-- 转换器bean -->
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<!-- 指定转换器类list -->
<property name="converters">
<list>
<!-- 日期格式转换器 -->
<bean class="com.dqxst.converters.DateConverter" />
</list>
</property>
</bean> <!-- 配置服务器端校验器 -->
<bean id="validator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<!-- 校验器-->
<property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
<!-- 指定校验使用的资源文件,如果不指定则默认使用classpath下的ValidationMessages.properties -->
<property name="validationMessageSource" ref="messageSource" />
</bean>
<!-- 校验错误信息配置文件 -->
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<!-- 资源文件名-->
<property name="basenames">
<list>
<value>classpath:CustomValidationMessages</value>
</list>
</property>
<!-- 资源文件编码格式 -->
<property name="fileEncodings" value="utf-8" />
<!-- 对资源文件内容缓存时间,单位秒 -->
<property name="cacheSeconds" value="120" />
</bean> <!-- 全局异常处理器,由springmvc自动管理,只需要实现HandlerExceptionResolver接口即可,只能有一个起效 -->
<bean class="com.dqxst.exception.CustomExceptionResolvar" /> <!-- 文件上传解析器 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置上传文件的最大尺寸为5MB -->
<property name="maxUploadSize">
<value>5242880</value>
</property>
</bean> <!--拦截器,全局 -->
<mvc:interceptors>
<!--多个拦截器,顺序执行 -->
<!-- 登陆认证拦截器 -->
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.dqxst.interceptor.LoginInterceptor"></bean>
</mvc:interceptor>
<mvc:interceptor>
<!-- /**表示所有url包括子url路径 -->
<mvc:mapping path="/**"/>
<bean class="com.dqxst.interceptor.HandlerInterceptor1"></bean>
</mvc:interceptor>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.dqxst.interceptor.HandlerInterceptor2"></bean>
</mvc:interceptor>
</mvc:interceptors> <!-- 静态资源解析,包括 :js、css、img等-->
<mvc:resources location="/js/" mapping="/js/**"/>
<mvc:resources location="/img/" mapping="/img/**"/>
</beans>

最常用的配置形式

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

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

 <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 加载其他配置文件,默认为类路径 -->
<properties resource="db.properties"></properties> <!-- 配置别名简化使用 -->
<typeAliases>
<!-- 单个别名
<typeAlias type="com.dqxst.domain.User" alias="user"/>
-->
<!-- 批量别名,别名为类名首字母小写 -->
<package name="com.dqxst.domain"/>
</typeAliases> <!-- 配置mybatis数据库环境 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments> <!-- 加载映射文件 -->
<mappers>
<!-- 单个问价加载
<mapper resource="sqlMap/User.xml"/>
<mapper resource="mapper/UserMapper.xml"/>
-->
<!-- 批量文件加载:需要满足几个条件
、使用mapper代理开发
、mapper接口和配置文件同名且在同一目录下
-->
<package name="com.dqxst.mapper"/>
<package name="com.dqxst.mapper2"/>
</mappers>
</configuration>

mybatis底层配置

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

 <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 这是一个简单的配置文件 -->
<mapper namespace="test">
<!-- 配置一个select语句,
namespace.id是要用在程序中对应这条语句的
parameterType:指定占位符对应参数的类型。
!!!注意这里的占位符是#{xxx},xxx可以是value或其他字符
resultType:指定返回结果的类型
-->
<select id="findUserById" parameterType="int" resultType="com.dqxst.domain.User">
SELECT * FROM user WHERE id = #{id}
</select> <!-- 注意:
1、即使返回多条记录, resultType也是表示单条记录的类型而不是list
2、${xxx}拼接符:将参数不加修饰的和语句拼接成一句,像下面就可以用于模糊查询,不再使用?做占位符
拼接字符串有一个问题,就是sql注入。
!!!注意如果注入简单类型,这里的xxx只能使用value
-->
<select id="findUserByName" parameterType="java.lang.String" resultType="com.dqxst.domain.User">
SELECT * FROM user WHERE username like '%${value}%'
</select> <!--添加:因为添加的字段类型和pojo中的一样,所以 parameterType需要时pojo的类型,
而他们参数的具体类型,只要使用#{xxx},其中xxx是对于的pojo中的属性即可自动判断类型 selectKey就是在insert之后添加执行语句,下面是在insert之后执行,可以获取当前id值赋给pojo对象用于后续操作
!!!注意上面是用于获取自增型主键的 id
还可以在insert之前使用select uuid()获取非自增型主键的值
-->
<insert id="insertUser" parameterType="com.dqxst.domain.User">
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
SELECT LAST_INSERT_ID()
</selectKey>
INSERT INTO user(username,birthday,sex,address) value(#{username},#{birthday},#{sex},#{address})
</insert> <!-- 删除 -->
<delete id="deleteUser" parameterType="java.lang.Integer">
DELETE FROM user WHERE id=#{id}
</delete> <!-- 更新 -->
<update id="updateUser" parameterType="com.dqxst.domain.User">
UPDATE user SET username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} WHERE id=#{id}
</update>
</mapper>

普通sql配置

 <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 这是一个使用mapper接口开发的配置文件,有一些规范:
1、namespace是对应mapper接口全限定名
2、下面的语句要和对应mapper接口中的方法对应,id==>方法名,parameterType==>参数类型,
resultType==>返回值类型
-->
<mapper namespace="com.dqxst.mapper.UserMapper">
<!-- 配置一个select语句-->
<select id="findUserById" parameterType="int" resultType="user">
SELECT * FROM user WHERE id = #{id}
</select>
<select id="findUserByName" parameterType="java.lang.String" resultType="com.dqxst.domain.User">
SELECT * FROM user WHERE username like '%${value}%'
</select> <!--添加-->
<insert id="insertUser" parameterType="com.dqxst.domain.User">
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
SELECT LAST_INSERT_ID()
</selectKey>
INSERT INTO user(username,birthday,sex,address) value(#{username},#{birthday},#{sex},#{address})
</insert> <!-- 删除 -->
<delete id="deleteUser" parameterType="java.lang.Integer">
DELETE FROM user WHERE id=#{id}
</delete> <!-- 更新 -->
<update id="updateUser" parameterType="com.dqxst.domain.User">
UPDATE user SET username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} WHERE id=#{id}
</update> <!-- 优化应用:
1、where语句的快速拼接,在where节点中使用if节点包含多条判断之后添加的语句
2、可以将一部分常用的语句构成sql片段,通过id进行引用
-->
<select id="findUserBySexAndName" parameterType="user" resultType="user">
<!-- SELECT * FROM user WHERE sex=#{sex} AND username like '%${username}%' -->
SELECT * FROM user
<where>
<include refid="query_user_where"></include>
</where>
</select> <sql id="query_user_where">
<if test="sex!=''">
AND sex=#{sex}
</if>
<if test="username!=''">
AND username like '%${username}%'
</if>
</sql> </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接口并且自动生成实现类,一般使用批量扫描实现。

 <?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:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd">
<context:annotation-config/>
<context:component-scan base-package="com.dqxst"></context:component-scan>
<context:property-placeholder location="classpath:db.properties"/> <!-- 配置 SqlSessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 加载配置文件 -->
<property name="configLocation" value="classpath:mybatis/sqlMapConfig.xml"></property>
<!-- -->
<property name="dataSource" ref="dataSource"></property>
</bean> <!-- 配置数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/mybatis"></property>
<property name="user" value="root"></property>
<property name="password" value="920346"></property>
<property name="initialPoolSize" value="10"></property>
<property name="maxPoolSize" value="30"></property>
</bean> <!-- 这个类是对mapper接口进行自动扫描的类 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 指定扫描包名,如需扫描多包,用,分隔即可 -->
<property name="basePackage" value="com.dqxst.mapper" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
</beans>

spring和mybatis整合配置

五、框架对比:

struct2与springmvc对比:

ssm框架的总结的更多相关文章

  1. 【SSM框架】Spring + Springmvc + Mybatis 基本框架搭建集成教程

    本文将讲解SSM框架的基本搭建集成,并有一个简单demo案例 说明:1.本文暂未使用maven集成,jar包需要手动导入. 2.本文为基础教程,大神切勿见笑. 3.如果对您学习有帮助,欢迎各种转载,注 ...

  2. java web后台开发SSM框架(Spring+SpringMVC+MyBaitis)搭建与优化

    一.ssm框架搭建 1.1创建项目 新建项目后规划好各层的包. 1.2导入包 搭建SSM框架所需包百度云链接:http://pan.baidu.com/s/1cvKjL0 1.3整合spring与my ...

  3. JavaEE学习文章汇总-ssm框架

    Spring-SpringMVC-Mybatis 1:Maven创建webapp项目 Maven 下的spring框架(一创建项目) 2:mybatis3 入门教程 mybatis实战教程(mybat ...

  4. SSM框架总结(1)

    ----------------------20170106-------------------------------------- 1.mabatis.genertor中自动生成文件,需要在ge ...

  5. 【SSM】Eclipse使用Maven创建Web项目+整合SSM框架

    自己接触ssm框架有一段时间了,从最早的接触新版ITOO项目的(SSM/H+Dobbu zk),再到自己近期来学习到的<淘淘商城>一个ssm框架的电商项目.用过,但是还真的没有自己搭建过, ...

  6. SSM框架整合首只拦路虎——Eclipse新建Maven Project界面select an archetype 空白

    首先给大家说,本篇博客没有技术价值,纯属个人学习总结,权当给大家添加一乐.事件如有雷同,纯属巧合,莫怪! 前一段时间一直在看<淘淘商城>这个教程,里面讲的是SSM框架的一个电商项目.这不是 ...

  7. SSM框架-----------SpringMVC+Spring+Mybatis框架整合详细教程

    1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One  ...

  8. SSM框架的整合思路&功能实现

    这是我第一篇博客,关于SSM框架的整合思路以及简单功能实现. 首先,最近刚刚学习Spring+SpringMVC+Mybatis,在开发时遇到形形色色的问题,周遭人也为我提供了一些思路,我会一点点整理 ...

  9. [JSP]Maven+SSM框架(Spring+SpringMVC+MyBatis) - Hello World

    来源:http://blog.csdn.net/zhshulin/article/details/37956105?utm_source=tuicool&utm_medium=referral ...

  10. Maven+SSM框架实现简单的增删改查

    Spring介绍: spring 使用基本的 JavaBean 来完成以前只可能由 EJB 完成的事情.然而, Spring的用途不仅限于服务器端的开发.从简单性.可测试性和松耦合的角度而言,任何Ja ...

随机推荐

  1. Goldengate进程的合并与拆分规范

    Goldengate抽取进程的合并与拆分原则 1.    文档综述 1.1.  文档说明 本文档描述了对GoldenGate的抽取进程进行拆分和合并的基本原则和详细步骤.  1.2.  读者范围 本文 ...

  2. nil gogo

    https://blog.csdn.net/zhonggaorong/article/details/50233421 https://github.com/KevinHM/FunctionalRea ...

  3. iOS网络缓存机制

    iOS的网络引擎自带缓存机制: 网络请求在经过网络引擎时有过处理(添加了字段),所以用api的网络请求无法获取缓存. [NSURLCache sharedURLCache]

  4. 一次Linux LVM VG丢失完整找回过程记录

    某客户的一台PC服务器连接了一台HP EVA 的FC SAN存储,划了一个6T的LUN分作一个单独的VG使用,在某一次异常掉电之后,发现该VG完全丢失,使用vgs/pvs/lvs命令均无法找到此VG及 ...

  5. sql查询 按照规定的顺序返回结果集。

    DECODE函数 oracle 独有,功能强大.相当于 if else if IF 条件=值1 THEN RETURN(翻译值1)ELSIF 条件=值2 THEN RETURN(翻译值2) ..... ...

  6. 安装虚拟机(VM)(一)

    原创作品,允许转载,转载时请务必声明作者信息和本声明.  https://www.cnblogs.com/zhu520/p/10728248.html 本人小白,有错指出.谢谢! 一:安装虚拟机前奏 ...

  7. [Recompose] Refactor React Render Props to Streaming Props with RxJS and Recompose

    This lesson takes the concept of render props and migrates it over to streaming props by keeping the ...

  8. 给一个执行在windows 7和NAT下的VMWARE虚拟机分配固定IP

    虚拟机上装了个oracleserver,每次vmware重新启动或者resume时总要分配新的IP地址,这样就得改动windows下的client配置,所以须要想办法把IP地址固定住. DHCP服务在 ...

  9. HDU 1730 Northcott Game

    简单的尼姆博弈.想到了非常easy! 就拿一行举例.怎么赢.? 就是死劲挨着对方移,当然假设本身就是挨着的,又轮到你移动了,那么对于这一行来讲.你就是输的!! 由此可见每一行的棋子起始距离就显得尤为重 ...

  10. 同一台服务器部署多个WEB应用,SESSION冲突的解决方法

    由于一台服务器上使用Tomcat部署多个WEB项目,而项目因为用到框架都是一样的,导致同时运行,session相互冲突,这个登录后,那个就得重新登录,造成了使用不方便,解决办法如下: 在server. ...