ssm框架的总结
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框架的总结的更多相关文章
- 【SSM框架】Spring + Springmvc + Mybatis 基本框架搭建集成教程
本文将讲解SSM框架的基本搭建集成,并有一个简单demo案例 说明:1.本文暂未使用maven集成,jar包需要手动导入. 2.本文为基础教程,大神切勿见笑. 3.如果对您学习有帮助,欢迎各种转载,注 ...
- java web后台开发SSM框架(Spring+SpringMVC+MyBaitis)搭建与优化
一.ssm框架搭建 1.1创建项目 新建项目后规划好各层的包. 1.2导入包 搭建SSM框架所需包百度云链接:http://pan.baidu.com/s/1cvKjL0 1.3整合spring与my ...
- JavaEE学习文章汇总-ssm框架
Spring-SpringMVC-Mybatis 1:Maven创建webapp项目 Maven 下的spring框架(一创建项目) 2:mybatis3 入门教程 mybatis实战教程(mybat ...
- SSM框架总结(1)
----------------------20170106-------------------------------------- 1.mabatis.genertor中自动生成文件,需要在ge ...
- 【SSM】Eclipse使用Maven创建Web项目+整合SSM框架
自己接触ssm框架有一段时间了,从最早的接触新版ITOO项目的(SSM/H+Dobbu zk),再到自己近期来学习到的<淘淘商城>一个ssm框架的电商项目.用过,但是还真的没有自己搭建过, ...
- SSM框架整合首只拦路虎——Eclipse新建Maven Project界面select an archetype 空白
首先给大家说,本篇博客没有技术价值,纯属个人学习总结,权当给大家添加一乐.事件如有雷同,纯属巧合,莫怪! 前一段时间一直在看<淘淘商城>这个教程,里面讲的是SSM框架的一个电商项目.这不是 ...
- SSM框架-----------SpringMVC+Spring+Mybatis框架整合详细教程
1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One ...
- SSM框架的整合思路&功能实现
这是我第一篇博客,关于SSM框架的整合思路以及简单功能实现. 首先,最近刚刚学习Spring+SpringMVC+Mybatis,在开发时遇到形形色色的问题,周遭人也为我提供了一些思路,我会一点点整理 ...
- [JSP]Maven+SSM框架(Spring+SpringMVC+MyBatis) - Hello World
来源:http://blog.csdn.net/zhshulin/article/details/37956105?utm_source=tuicool&utm_medium=referral ...
- Maven+SSM框架实现简单的增删改查
Spring介绍: spring 使用基本的 JavaBean 来完成以前只可能由 EJB 完成的事情.然而, Spring的用途不仅限于服务器端的开发.从简单性.可测试性和松耦合的角度而言,任何Ja ...
随机推荐
- AngularJs轻松入门源码托管至Github
Github是全球最大的代码托管平台,笔者玩Github有一段时间了,有很多开源项目的源码都托管在Github上,笔者在上面也发现了不少优秀的开源代码. 每次写完博文想在最后附上文章相关的代码,但是由 ...
- RSA加密的方式和解密方式
RSAsecurity.java package com.mstf.rsa; import java.security.KeyFactory; import java.security.KeyPair ...
- C# 引用DLL版本冲突
已解决,到官网上下载旧key版本,然后再重定向即可. 手动引用两个版本的DLL错误的原因是我 publicKeyToken 大小写的问题(竟然没校验~~) 但我想不明白,这样搞如果依赖一多的话,甚至那 ...
- sql server 中查询数据库下有多少张表以及同义词等信息
--查询数据库有多少张表SELECT count(0) from sysobjects where xtype = 'u' 复制代码 解释:sysobjects系统对象表. 保存当前数据库的对象.如约 ...
- Sublime Text 3破解
----- BEGIN LICENSE ----- sgbteam Single User License EA7E- 8891CBB9 F1513E4F 1A3405C1 A865D53F 115F ...
- Java基础学习总结(17)——线程
一.线程的基本概念 线程理解:线程是一个程序里面不同的执行路径 每一个分支都叫做一个线程,main()叫做主分支,也叫主线程. 程只是一个静态的概念,机器上的一个.class文件,机器上的一个.exe ...
- MIBTree
NETWORK-APPLIANCE-MIB http://www.mibdepot.com/cgi-bin/getmib3.cgi?abc=0&n=NETWORK-APPLIANCE-MIB& ...
- HTML学习----------DAY1 第二节
使用 Notepad 或 TextEdit 来编写 HTML 可以使用专业的 HTML 编辑器来编辑 HTML: Adobe Dreamweaver Microsoft Expression Web ...
- postgresql拓展if、ifnull、group_concat函数
postgresql版本是8.2.15. 最近陆续有数据分析师从impala.hive转到查询gpdb,gpdb虽然能够支持在查询语句中带多个distinct,但是缺少相应的if.ifnull.gro ...
- 使用commons-email发邮件
这里我用到了两个包: commons-email-1.3.2.jar mail-1.4.1.jar 如果不加mail.jar,就可能会抛出NoClassDefFoundError异常 之后代码引用ht ...