ssm對應的是spring+springmvc+mybatis,css
1、spring,略。html
2、spring mvc是spring提供的mvc模塊,前端
從圖中能夠看出,springmvc的模塊劃分很是多,每個模塊都須要本身選擇一種實現(有springmvc實現的)。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 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>
在圖中DispatcherServlert處應該有一個Controller的存在,實際是由Controller來進行控制工做。而Controller在springmvc中(一般)是使用註解聲明的,還包括了一系列的註解輔助開發。一個Controller最主要的工做就是(這對struct2也適用):mysql
①接收參數而後與java中的pojo/集合等綁定。參考:http://www.cnblogs.com/HD/p/4107674.htmlweb
②調用相應service(業務)層進行業務處理spring
③返回處理結果數據Model和頁面view。參考:http://www.cnblogs.com/xiepeixing/p/4243801.htmlsql
參考:http://www.cnblogs.com/kreo/p/4344668.html數據庫
mvc框架的一些經常使用功能:json
①服務器端校驗,就是對發送到服務器上的參數進行的校驗,在註解驅動中配置。
②類型轉換:就是將自定義的格式轉換爲指定的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>
3、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>
②配置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 二、${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>
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 二、下面的語句要和對應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>
在配置中有兩個重要的映射:
①輸入映射:就是在條件語句中的參數,在配置文件中用佔位符表示,在實際的DAO層就是普通的參數傳遞。
②輸出映射:就是將查詢結果映射到指定的pojo類中
在使用時,mybatis須要獲取SqlSessionFactory對象和SqlSession對象,經過SqlSession對象進行實際的操做。
參考:http://blog.csdn.net/rootsuper/article/details/8537498
4、ssm框架整合:
①spring和springmvc整合,無需整合,可是須要添加響應的jar包,並將springmvc使用的DispatcherServlet註冊到web.xml上
②spring和mybatis整合:
一、使用spring管理sqlSessionFactory對象,也就是數據庫的鏈接
二、使用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>
5、框架對比:
struct2與springmvc對比: