版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
-.z.SSM三大框架的整合〔Spring+SpringMVC+MyBatis〕前记:孟,佳媚和我在11月23日参加了一次关于SSM的比赛,因此对SSM有点理解,所以在网上搜集了一些关于SSM框架的资料整理出来。目录SSM三大框架的整合〔Spring+SpringMVC+MyBatis〕11、根本概念21.1、Spring21.2、SpringMVC21.3、MyBatis22、整合步骤32.1、Maven引入需要的JAR包32.2、Spring与MyBatis的整合32.3、整合SpringMVC3补充一3配置实例演示3-.z.1、根本概念1.1、Spring
Spring是一个开源框架,Spring是于2003
年兴起的一个轻量级的Java
开发框架,由Rod
Johnson
在其著作E*pert
One-On-One
J2EE
Development
and
Design中阐述的局部理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创立的。Spring使用根本的JavaBean来完成以前只可能由E完成的事情。然而,Spring的用途不仅限于效劳器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。简单来说,Spring是一个轻量级的控制反转〔IoC〕和面向切面〔AOP〕的容器框架。1.2、SpringMVC
Spring
MVC属于SpringFrameWork的后续产品,已经融合在Spring
Web
Flow里面。Spring
MVC
别离了控制器、模型对象、分派器以及处理程序对象的角色,这种别离让它们更容易进展定制。1.3、MyBatis
MyBatis
本是apache的一个开源工程iBatis,
2010年这个工程由apache
software
foundation
迁移到了google
code,并且改名为MyBatis
。MyBatis是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL
Maps和Data
Access
Objects〔DAO〕MyBatis
消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis
使用简单的
*ML或注解用于配置和原始映射,将接口和
Java
的POJOs〔Plain
Old
Java
Objects,普通的
Java对象〕映射成数据库中的记录。2、开发环境搭建如果需要,参看之前的博文:3、MavenWeb工程创立如果需要,参看之前的博文:4、SSM整合下面主要介绍三大框架的整合,至于环境的搭建以及工程的创立,参看上面的博文。这次整合我分了2个配置文件,分别是spring-mybatis.*ml,包含spring和mybatis的配置文件,还有个是spring-mvc的配置文件,此外有2个资源文件:pertis和perties。完整目录构造如下:使用框架都是较新的版本:
Spring
4.0.2
RELEASE
Spring
MVC
4.0.2
RELEASE2、整合步骤2.1、Maven引入需要的JAR包为了方便后面说的时候不需要引入JAR包,我这里直接给出所有需要的JAR包,这都是根本的JAR包,每个包的是干什么的都有注释,就不再多说了。pom.*ml<properties> <!--spring版本号--> <spring.version>4.0.2.RELEASE</spring.version> <!--mybatis版本号--> <mybatis.version>3.2.6</mybatis.version> <!--log4j日志文件管理包版本--> <slf4j.version>1.7.7</slf4j.version> <log4j.version>1.2.17</log4j.version> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <!--表示开发的时候引入,发布的时候不会加载此包--> <scope>test</scope> </dependency> <!--spring核心包--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-o*m</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-t*</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-conte*t-support</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <!--mybatis核心包--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> <!--mybatis/spring包--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.2.2</version> </dependency> <!--导入javaeejar包--> <dependency> <groupId>java*</groupId> <artifactId>javaee-api</artifactId> <version>7.0</version> </dependency> <!--导入Mysql数据库jar包--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.30</version> </dependency> <!--导入dbcp的jar包,用来在applicationConte*t.*ml中配置数据库--> <dependency> <groupId>mons-dbcp</groupId> <artifactId>mons-dbcp</artifactId> <version>1.2.2</version> </dependency> <!--JSTL标签类--> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!--日志文件管理包--> <!--logstart--> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> <!--格式化对象,方便输出日志--> <dependency> <groupId>.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.1.41</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.version}</version> </dependency> <!--logend--> <!--映入JSON--> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.13</version> </dependency> <!--上传组件包--> <dependency> <groupId>mons-fileupload</groupId> <artifactId>mons-fileupload</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>mons-io</groupId> <artifactId>mons-io</artifactId> <version>2.4</version> </dependency> <dependency> <groupId>mons-codec</groupId> <artifactId>mons-codec</artifactId> <version>1.9</version> </dependency> </dependencies>2.2、Spring与MyBatis的整合所有需要的JAR包都引入以后,首先进展Spring与MyBatis的整合,然后再进展JUnit测试,先看一个工程构造图:、建立JDBC属性文件perties〔文件编码修改为utf-8〕url=jdbc:mysql://11:8080/db_zslusername=demaopassword=demao*定义初始连接数initialSize=0*定义最接数ma*Active=20*定义最大空闲ma*Idle=20*定义最小空闲minIdle=1*定义最长等待时间ma*Wait=60000、建立spring-mybatis.*ml配置文件这个文件就是用来完成spring和mybatis的整合的。这里面也没多少行配置,主要的就是自动扫描,自动注入,配置数据库。注释也很详细,大家看看就明白了。spring-mybatis.*ml<"*mlversion="1.0"encoding="UTF-8""><beans*mlns="./schema/beans" *mlns:*si="./2001/*MLSchema-instance"*mlns:p="./schema/p" *mlns:conte*t="./schema/conte*t" *mlns:mvc="./schema/mvc" *si:schemaLocation="./schema/beans./schema/beans/spring-beans-3.1.*sd./schema/conte*t./schema/conte*t/spring-conte*t-3.1.*sd./schema/mvc./schema/mvc/spring-mvc-4.0.*sd"> <!--自动扫描--> <conte*t:ponent-scanbase-package="..hnust"/> <!--引入配置文件--> <beanid="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <propertyname="location"value="classpath:perties"/> </bean> <beanid="dataSource"class="org.apache.mons.dbcp.BasicDataSource" destroy-method="close"> <propertyname="driverClassName"value="${driver}"/> <propertyname="url"value="${url}"/> <propertyname="username"value="${username}"/> <propertyname="password"value="${password}"/> <!--初始化连接大小--> <propertyname="initialSize"value="${initialSize}"></property> <!--连接池最大数量--> <propertyname="ma*Active"value="${ma*Active}"></property> <!--连接池最大空闲--> <propertyname="ma*Idle"value="${ma*Idle}"></property> <!--连接池最小空闲--> <propertyname="minIdle"value="${minIdle}"></property> <!--获取连接最大等待时间--> <propertyname="ma*Wait"value="${ma*Wait}"></property> </bean> <!--spring和MyBatis完美整合,不需要mybatis的配置映射文件--> <beanid="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean"> <propertyname="dataSource"ref="dataSource"/> <!--自动扫描mapping.*ml文件--> <propertyname="mapperLocations"value="classpath://hnust/mapping/*.*ml"></property> </bean> <!--DAO接口所在包名,Spring会自动查找其下的类--> <beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer"> <propertyname="basePackage"value="..hnust.dao"/> <propertyname="sqlSessionFactoryBeanName"value="sqlSessionFactory"></property> </bean> <!--(事务管理)transactionmanager,useJtaTransactionManagerforglobalt*--> <beanid="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <propertyname="dataSource"ref="dataSource"/> </bean></beans>、Log4j的配置为了方便调试,一般都会使用日志来输出信息,Log4j是Apache的一个开放源代码工程,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口效劳器、NT的事件记录器、UNI*
Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。
Log4j的配置很简单,而且也是通用的,下面给出一个根本的配置,换到其他工程中也无需做多大的调整,如果想做调整或者想了解Log4j的各种配置,参看我的一篇博文,很详细:下面给出配置文件目录:perties*定义LOG输出级别log4j.rootLogger=INFO,Console,File*定义日志输出目的地为控制台log4j.appender.Console.Target=System.out*可以灵活地指定日志输出格式,下面一行是指定具体的格式log4j.appender.Console.layout.ConversionPattern=[%c]-%m%n*文件大小到达指定尺寸的时候产生一个新的文件*指定输出目录log4j.appender.File.File=logs/ssm.log*定义文件最大大小log4j.appender.File.Ma*FileSize=10MB*输出所以日志,如果换成DEBUG表示输出DEBUG以上级别日志log4j.appender.File.Threshold=ALLlog4j.appender.File.layout.ConversionPattern=[%p][%d{yyyy-MM-ddHH\:mm\:ss}][%c]%m%n、JUnit测试经过以上步骤〔到,log4j不配也没影响〕,我们已经完成了Spring和mybatis的整合,这样我们就可以编写一段测试代码来试试是否成功了。、创立测试用表既然我们需要测试,则我们就需要建立在数据库中建立一个测试表,这个表建的很简单,SQL语句为:DROPTABLEIFE*ISTS`user_t`;CREATETABLE`user_t`(`id`int(11)NOTNULLAUTO_INCREMENT,`user_name`varchar(40)NOTNULL,`password`varchar(255)NOTNULL,`age`int(4)NOTNULL,PRIMARYKEY(`id`))ENGINE=InnoDBAUTO_INCREMENT=2DEFAULTCHARSET=utf8;/*Dataforthetable`user_t`*/insertinto`user_t`(`id`,`user_name`,`password`,`age`)values(1,'测试','sfasgfaf',24);、利用MyBatisGenerator自动创立代码参考博文:这个可根据表自动创立实体类、MyBatis映射文件以及DAO接口,当然,我习惯将生成的接口名改为IUserDao,而不是直接用它生成的UserMapper。如果不想麻烦就可以不改。完成后将文件复制到工程中。如图:、建立Service接口和实现类目录构造:下面给出具体的容:IUserService.javepackage..hnust.service;import..hnust.pojo.User;publicinterfaceIUserService{ publicUsergetUserById(intuserId);}UserServiceImpl.javapackage..hnust.service.impl;importjava*.annotation.Resource;importorg.springframework.stereotype.Service;import..hnust.dao.IUserDao;import..hnust.pojo.User;import..hnust.service.IUserService;Service("userService")publicclassUserServiceImplimplementsIUserService{ Resource privateIUserDaouserDao; Override publicUsergetUserById(intuserId){ //TODOAuto-generatedmethodstub returnthis.userDao.selectByPrimaryKey(userId); }}、建立测试类测试类在src/test/java中建立,下面测试类中注释掉的局部是不使用Spring时,一般情况下的一种测试方法;如果使用了Spring则就可以使用注解的方式来引入配置文件和类,然后再将service接口对象注入,就可以进展测试了。如果测试成功,表示Spring和Mybatis已经整合成功了。输出信息使用的是Log4j打印到控制台。packageorg.zsl.testmybatis;importjava*.annotation.Resource;importorg.apache.log4j.Logger;importorg.junit.Before;importorg.junit.Test;importorg.junit.runner.RunWith;importorg.springframework.conte*t.ApplicationConte*t;importorg.springframework.conte*t.support.ClassPath*mlApplicationConte*t;importorg.springframework.test.conte*t.Conte*tConfiguration;importorg.springframework.test.conte*t.junit4.SpringJUnit4ClassRunner;import.alibaba.fastjson.JSON;import..hnust.pojo.User;import..hnust.service.IUserService;RunWith(SpringJUnit4ClassRunner.class) //表示继承了SpringJUnit4ClassRunner类Conte*tConfiguration(locations={"classpath:spring-mybatis.*ml"})publicclassTestMyBatis{ privatestaticLoggerlogger=Logger.getLogger(TestMyBatis.class);// privateApplicationConte*tac=null; Resource privateIUserServiceuserService=null;// Before// publicvoidbefore(){// ac=newClassPath*mlApplicationConte*t("applicationConte*t.*ml");// userService=(IUserService)ac.getBean("userService");// } Test publicvoidtest1(){ Useruser=userService.getUserById(1); //System.out.println(user.getUserName()); //("值:"+user.getUserName()); (JSON.toJSONString(user)); }}测试结果:至此,完成Spring和mybatis这两大框架的整合,下面在继续进展SpringMVC的整合。2.3、整合SpringMVC上面已经完成了2大框架的整合,SpringMVC的配置文件单独放,然后在web.*ml中配置整合。、配置spring-mvc.*ml配置里面的注释也很详细,在此就不说了,主要是自动扫描控制器,视图模式,注解的启动这三个。<"*mlversion="1.0"encoding="UTF-8""><beans*mlns="./schema/beans" *mlns:*si="./2001/*MLSchema-instance"*mlns:p="./schema/p" *mlns:conte*t="./schema/conte*t" *mlns:mvc="./schema/mvc" *si:schemaLocation="./schema/beans./schema/beans/spring-beans-3.1.*sd./schema/conte*t./schema/conte*t/spring-conte*t-3.1.*sd./schema/mvc./schema/mvc/spring-mvc-4.0.*sd"> <!--自动扫描该包,使SpringMVC认为包下用了controller注解的类是控制器--> <conte*t:ponent-scanbase-package="..hnust.controller"/> <!--防止IE执行AJA*时,返回JSON出现下载文件--> <beanid="mappingJacksonMessageConverter" class="org.springframework..converter.json.MappingJacksonMessageConverter"> <propertyname="supportedMediaTypes"> <list> <value>te*t/html;charset=UTF-8</value> </list> </property> </bean> <!--启动SpringMVC的注解功能,完成请求和注解POJO的映射--> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <propertyname="messageConverters"> <list> <refbean="mappingJacksonMessageConverter"/> <!--JSON转换器--> </list> </property> </bean> <!--定义跳转的文件的前后缀,视图模式配置--> <beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!--这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个可用的url地址--> <propertyname="prefi*"value="/WEB-INF/jsp/"/> <propertyname="suffi*"value=".jsp"/> </bean> <!--配置文件上传,如果没有使用文件上传可以不用配置,当然如果不配,则配置文件中也不必引入上传组件包--> <beanid="multipartResolver"class="org.springframework.web.multipart.mons.monsMultipartResolver"><!--默认编码--><propertyname="defaultEncoding"value="utf-8"/><!--文件大小最大值--><propertyname="ma*UploadSize"value=""/><!--存中的最大值--><propertyname="ma*InMemorySize"value="40960"/></bean></beans>、配置web.*ml文件这里面对spring-mybatis.*ml的引入以及配置的spring-mvc的Servlet就是为了完成SSM整合,之前2框架整合不需要在此处进展任何配置。配置一样有详细注释,不多解释了。web.*ml<"*mlversion="1.0"encoding="UTF-8""><web-app*mlns:*si="./2001/*MLSchema-instance" *mlns="java.sun./*ml/ns/javaee" *si:schemaLocation="java.sun./*ml/ns/javaeejava.sun./*ml/ns/javaee/web-app_3_0.*sd" version="3.0"> <display-name>ArchetypeCreatedWebApplication</display-name> <!--Spring和mybatis的配置文件--> <conte*t-param> <param-name>conte*tConfigLocation</param-name> <param-value>classpath:spring-mybatis.*ml</param-value> </conte*t-param> <!--编码过滤器--> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <async-supported>true</async-supported> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!--Spring监听器--> <listener> <listener-class>org.springframework.web.conte*t.Conte*tLoaderListener</listener-class> </listener> <!--防止Spring存溢出监听器--> <listener> <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class> </listener> <!--SpringMVCservlet--> <servlet> <servlet-name>SpringMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>conte*tConfigLocation</param-name> <param-value>classpath:spring-mvc.*ml</param-value> </init-param> <load-on-startup>1</load-on-startup> <async-supported>true</async-supported> </servlet> <servlet-mapping> <servlet-name>SpringMVC</servlet-name> <!--此处可以可以配置成*.do,对应struts的后缀习惯--> <url-pattern>/</url-pattern> </servlet-mapping> <wele-file-list> <wele-file>/inde*.jsp</wele-file> </wele-file-list></web-app>、测试至此已经完成了SSM三大框架的整合了,接下来测试一下,如果成功了,则恭喜你,如果失败了,继续调试吧,作为程序员就是不停的与BUG做斗争!、新建jsp页面showUser.jsp
此页面仅输出一下用户名,完成一个完整的简单流程。<%pagelanguage="java"import="java.util.*"pageEncoding="utf-8"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head> <title>测试</title></head><body>${user.userName}</body></html>、建立UserController类UserController.java
控制器package..hnust.controller;importjava*.annotation.Resource;importjava*.servlet..ServletRequest;importorg.springframework.stereotype.Controller;importorg.springframework.ui.Model;importorg.springframework.web.bind.annotation.RequestMapping;import..hnust.pojo.User;import..hnust.service.IUserService;ControllerRequestMapping("/user")publicclassUserController{ Resource privateIUserServiceuserService; RequestMapping("/showUser") publicStringtoInde*(ServletRequestrequest,Modelmodel){ intuserId=Integer.parseInt(request.getParameter("id")); Useruser=this.userService.getUserById(userId); model.addAttribute("user",user); return"showUser"; }}、部署工程输入地址:localhost:8080/工程名称/user/showUser"id=1至此,SSM三大框架的整合就完成了,在此根底上可再添加其他功能。补充一1.所需要Jar包.包org.springframework.web-3.0.1系列//公共包与Spring的整合所需的包mybatis-3.0.5.jaraopalliance-1.0.jarmybatis-spring-1.0.1.jarmybatis-generator-core-1.3.1.jar(mybatis代码生成器包验证支持包2.web.*ml配置Servlet配置配置servlet初始化文件.以及servlet-mapping配置.应用路径配置webAppRootKeyLog4j配置Log4jConfigLocationLog4jRefreshIntervalSpring上下文配置conte*tConfigLocationSpring字符集过滤器配置监听器配置org.springframework.web.conte*t.Conte*tLoaderListenerlog4j监听器配置3.springmvc-servlet.*ml配置启动mvc注解驱动<mvc:annotation-driven/>组件scanner主要是自动去注入指定包里的对象<conte*t:ponent-scanbase-package=".los.mvc.controller"/>ViewResolver&View映射关系InternalResourceViewResolver基于resource对jsp/jstl的支持<beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"><propertyname="prefi*"value="/WEB-INF/views/"/><propertyname="suffi*"value=".jsp"/><!--InternalResourceViewResolverviewClass默认值就是JstlView--><propertyname="viewClass"value="org.springframework.web.servlet.view.JstlView"></property></bean>自定义拦截器配置<mvc:interceptors><mvc:interceptor><mvc:mappingpath="/json*"/><beanclass=".erceptor.MyInterceptor"></bean></mvc:interceptor></mvc:interceptors>国际化配置<beanid="messageSource"class="org.springframework.conte*t.support.ResourceBundleMessageSource"><propertyname="basename"value="message"></property></bean>4.Spring上下文--applicationConte*t.*ml配置支持注解<beanclass="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"></bean><beanclass="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"></bean><importresource="service.*ml"/><importresource="dao.*ml"/><importresource="orm.*ml"/>service.*mldao.*ml配置service和Repository5.Mybatis3.0.5-Spring整合--orm.*ml
DataSource配置<beanid="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"><propertyname="driverClassName"value=".mysql.jdbc.Driver"/><propertyname="url"value="jdbc:mysql://localhost:3306/mvc"/><propertyname="username"value="root"/><propertyname="password"value="root"/></bean>注册事务管理器(Mybatis将事务转交给Spring来管理)<beanid="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><propertyname="dataSource"ref="dataSource"/></bean>SqlSessionFactory配置(Mybatis核心是sqlSessionFactory来获取orm处理对象,dataSource,mapperLocations配置mybaits自动生成的*ml文件.就是注入映射关系.)<beanid="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean"><propertyname="dataSource"ref="dataSource"/><propertyname="mapperLocations"value="classpath://los/mvc/mapper/*.*ml"/></bean>MapperScanner配置.自动去搜索mapper里的对象,并注入.<beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer"><propertyname="basePackage"value=".los.mvc.dao"/></bean>启动Spring注解事务<t*:annotation-driven/>6.mybatis自动生成器配置--generatorConfig.*ml
sqlMapGeneratorsqlMpper.*ml生成器javaClientGeneratorModelDao生成器javaModelGeneratorModel生成器.los.util.MBG.java运行会自动生成mybatis代码.然后再配置orm.*ml7.Controller层配置类注解ControllerRequestMapping("/json")为访问该层的路径.方法注解RequestMapping(method=RequestMethod.GET)只有get方法才能访问.ResponseBody自动将返回的封装成json,方法返回值必须是map<String,">类型.RequestMapping(value="/doLogin")value=〞doLogin〞为访问该方法的handlermappingreturn"login/login";会通过ViewResolver找到对应的viewreturn"redirect:/user/toRegister.html";为spring-mvc的重定向.InitBinder()为绑定器,可以为request传来的数据进展数据类型转换.数据自动验证方法中参数需要有后面的两个(ValidUseruser,BindingResultresult).Valid的支持标准是JSR,HibernateValidate4是对该标准比拟好的实现.需要在Model类中配置验证的注解.判断验证是否正确通过result.hasErrors()或者result.hasFieldErrors()来判断,通过result.getAllErrors()或者result.getFieldErrors()来获取Errors然后遍历Errors获取相关想要的信息,例如Error.getDeafaultMessage(),这个是获取错误信息.具体的错误验证机制还地在Model类中配置.属性注解Autowired会为该属性自动注入bean,默认方式是byType.也可以用Resource这个注解默认是byName.8.Service层配置.(业务层)
类注解Service为ponent的子注解,分工更明细.Transactional可以为该业务类声明一个全类的事务.也可以将事务写在方法上.根据不同的需要.方法注解Transactional(readOnly=true)Transactional(readOnly=false,propagation=Propagation.REQUIRED,rollbackFor=E*ception.class)类的事务声明,可以设置隔离级别和传播属性,以及要回滚的异常名或者异常类,不需要回滚的异常名或者异常类.异常通常抛出给controller层来处理属性注解AutowiredResource9.Repository层配置.(持久层DaoImpl)
类注解Repository为ponent的子注解,意为持久层,分工更明细.一般不在这层处理事务.10.Entry层配置(Model层)
类注解Entry验证注解,常用的有:NotEmptyNotNullSize(min=2,ma*=10,message=〞**必须在{min}和{ma*}之间〞)EmailDecimalMa*AssertFalseAssertTrueNullValidURL(protocol=,host=,port=,rege*p=,flags=)一般情况下属性或者方法可以放多个约束注解,hibernatevalidate会以随机的顺序去验证这些约束.所以多个注解约束会有可能同一个属性返回多个message.所以有时候需要只返回一条message,则需要使用验证组Groups来达成.组别序列可以把一系列的组别按照一定的顺序排列在一起,然后逐个验证,只要有一个组别验证失败,就不继续验证剩余的组别。GroupSequence({User.class,GroupB.class,GroupC.class})验证组的顺序,约束里不指定group的为默认的User.class组.约束组放在类前,User.class为默认的约束组,GroupB,GroupC为空的接口.写在User外同个java文件下.NotEmpty(message="密码不能为空")Size(min=4,ma*=20,message="密码长度必须在{min}-{ma*}围",groups=GroupB.class)如果NotEmpty验证失败了,就不会继续验证Size配置实例演示最近做了个maven管理的springmvc+spring+mybatis,还用到了阿里巴巴的fastjson和druid连接池,配置文件如下pom.*ml文件[html]viewplaincopy<"*mlversion="1.0"encoding="UTF-8""><project*mlns="/POM/4.0.0"*mlns:*si="./2001/*MLSchema-instance"*si:schemaLocation="/POM/4.0.0
/maven-v4_0_0.*sd"><modelVersion></modelVersion><groupId>.dahafo.demo</groupId><name>um</name><packaging>war</packaging><version></version><properties><java-version>1.7</java-version><org.springframework-version></org.springframework-version><org.aspectj-version></org.aspectj-version><org.slf4j-version></org.slf4j-version></properties><dependencies><!--
Spring
--><dependency><groupId>org.springframework</groupId><artifactId>spring-conte*t</artifactId><version>${org.springframework-version}</version><e*clusions><!--
E*clude
mons
Logging
in
favor
of
SLF4j
--><e*clusion><groupId>mons-logging</groupId><artifactId>mons-logging</artifactId></e*clusion></e*clusions></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${org.springframework-version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${org.springframework-version}</version></dependency><!--
AspectJ
--><dependency><groupId>org.aspectj</groupId><artifactId>aspectjrt</artifactId><version>${org.aspectj-version}</version></dependency><!--
Logging
--><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${org.slf4j-version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>jcl-over-slf4j</artifactId><version>${org.slf4j-version}</version><scope>runtime</scope></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>${org.slf4j-version}</version><scope>runtime</scope></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version></version><e*clusions><e*clusion><groupId>java*.mail</groupId><artifactId>mail</artifactId></e*clusion><e*clusion><groupId>java*.jms</groupId><artifactId>jms</artifactId></e*clusion><e*clusion><groupId>.sun.jdmk</groupId><artifactId>jm*tools</artifactId></e*clusion><e*clusion><groupId>.sun.jm*</groupId><artifactId>jm*ri</artifactId></e*clusion></e*clusions><scope>runtime</scope></dependency><!--
Inject
--><dependency><groupId>java*.inject</groupId><artifactId>java*.inject</artifactId><version>1</version></dependency><!--
Servlet
--><dependency><groupId>java*.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency><dependency><groupId>java*.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.1</version><scope>provided</scope></dependency><dependency><groupId>java*.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><!--
mybatis
--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version></version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version></version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version></version></dependency><!--
Test
--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.7</version><scope>test</scope></dependency><dependency><groupId>.alibaba</groupId><artifactId>druid</artifactId><version></version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version></version></dependency><dependency><groupId>.alibaba</groupId><artifactId>fastjson</artifactId><version></version></dependency><dependency><groupId></groupId><artifactId>jackson-core</artifactId><version></version></dependency><dependency><groupId></groupId><artifactId>jackson-databind</artifactId><version></version></dependency><dependency><groupId>mons-fileupload</groupId><artifactId>mons-fileupload</artifactId><version></version></dependency></dependencies><build><plugins><plugin><artifactId>maven-eclipse-plugin</artifactId><version>2.9</version><configuration><additionalProjectnatures><projectnature></projectnature></additionalProjectnatures><additionalBuildmands><buildmand></buildmand></additionalBuildmands><downloadSources>true</downloadSources><downloadJavadocs>true</downloadJavadocs></configuration></plugin><plugin><groupId></groupId><artifactId>maven-piler-plugin</artifactId><version></version><configuration><source>1.6</source><target>1.6</target><pilerArgument>-*lint:all</pilerArgument><showWarnings>true</showWarnings><showDeprecation>true</showDeprecation></configuration></plugin><plugin><groupId></groupId><artifactId>e*ec-maven-plugin</artifactId><version></version><configuration><mainClass></mainClass></configuration></plugin></plugins></build><artifactId>demo-um</artifactId></project>web.*ml[html]viewplaincopy<"*mlversion="1.0"encoding="UTF-8""><web-appversion="2.5"*mlns="java.sun./*ml/ns/javaee"*mlns:*si="./2001/*MLSchema-instance"*si:schemaLocation="java.sun./*ml/ns/javaee
java.sun./*ml/ns/javaee/web-app_2_5.*sd"><!--
The
definition
of
the
Root
Spring
Container
shared
by
all
Servlets
and
Filters
--><conte*t-param><param-name>conte*tConfigLocation</param-name><param-value>/WEB-INF/spring/root-conte*t.*ml</param-value></conte*t-param><!--
用spring
Encoding,解决乱码问题
--><filter><filter-name>encodingFilter</filter-name><filter-class></filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!--
Creates
the
Spring
Container
shared
by
all
Servlets
and
Filters
--><listener><listener-class>org.springframework.web.conte*t.Conte*tLoaderListener</listener-class></listener><!--
Processes
application
requests
--><servlet><servlet-name>appServlet</servlet-name><servlet-class></servlet-cl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 房屋修缮合同范本
- 泥水工程施工分包协议
- 工业齿轮油供应合同
- 2024个人担保借款合同(附借据)
- 城市轨道交通与城市老年人福利的整合考核试卷
- 公共航站楼设施消防巡查管理考核试卷
- 广告投放策略与实施规范考核试卷
- 商业用房转让合同范例
- 新版豇豆种植合同模板
- 灯具销售长期合同模板
- 鲁科版综合实践活动五年级上册全册教案
- 投身崇德向善的道德实践
- 《建筑结构检测与加固》 试题试卷及答案
- 《2022年版新课程标准》初中地理课程标准理论测试题
- (162题)2024时事政治考试题库及答案
- GB/T 43657.2-2024工业车辆能效试验方法第2部分:操作者控制的自行式车辆、牵引车和载运车
- 坚持立足中国又面向世界讲解
- 校园欺凌普法教育
- 市政道路技术标
- 2024年卫生系统招聘考试-卫生系统招聘考试(公共卫生管理)笔试历年真题荟萃含答案
- 病情突变应急预案护理课件
评论
0/150
提交评论