




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
-.z.SSM三大框架的整合〔Spring+SpringMVC+MyBatis〕前記:孟,佳媚和我在11月23日參加了一次關(guān)于SSM的比賽,因此對SSM有點理解,所以在網(wǎng)上搜集了一些關(guān)于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
開發(fā)框架,由Rod
Johnson
在其著作E*pert
One-On-One
J2EE
Development
and
Design中闡述的局部理念和原型衍生而來。它是為了解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性而創(chuàng)立的。Spring使用根本的JavaBean來完成以前只可能由E完成的事情。然而,Spring的用途不僅限于效勞器端的開發(fā)。從簡單性、可測試性和松耦合的角度而言,任何Java應(yīng)用都可以從Spring中受益。簡單來說,Spring是一個輕量級的控制反轉(zhuǎn)〔IoC〕和面向切面〔AOP〕的容器框架。1.2、SpringMVC
Spring
MVC屬于SpringFrameWork的后續(xù)產(chǎn)品,已經(jīng)融合在Spring
Web
Flow里面。Spring
MVC
別離了控制器、模型對象、分派器以及處理程序?qū)ο蟮慕巧?,這種別離讓它們更容易進(jìn)展定制。1.3、MyBatis
MyBatis
本是apache的一個開源工程iBatis,
2010年這個工程由apache
software
foundation
遷移到了google
code,并且改名為MyBatis
。MyBatis是一個基于Java的持久層框架。iBATIS提供的持久層框架包括SQL
Maps和Data
Access
Objects〔DAO〕MyBatis
消除了幾乎所有的JDBC代碼和參數(shù)的手工設(shè)置以及結(jié)果集的檢索。MyBatis
使用簡單的
*ML或注解用于配置和原始映射,將接口和
Java
的POJOs〔Plain
Old
Java
Objects,普通的
Java對象〕映射成數(shù)據(jù)庫中的記錄。2、開發(fā)環(huán)境搭建如果需要,參看之前的博文:3、MavenWeb工程創(chuàng)立如果需要,參看之前的博文:4、SSM整合下面主要介紹三大框架的整合,至于環(huán)境的搭建以及工程的創(chuàng)立,參看上面的博文。這次整合我分了2個配置文件,分別是spring-mybatis.*ml,包含spring和mybatis的配置文件,還有個是spring-mvc的配置文件,此外有2個資源文件:pertis和perties。完整目錄構(gòu)造如下:使用框架都是較新的版本:
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> <!--表示開發(fā)的時候引入,發(fā)布的時候不會加載此包--> <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> <!--導(dǎo)入javaeejar包--> <dependency> <groupId>java*</groupId> <artifactId>javaee-api</artifactId> <version>7.0</version> </dependency> <!--導(dǎo)入Mysql數(shù)據(jù)庫jar包--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.30</version> </dependency> <!--導(dǎo)入dbcp的jar包,用來在applicationConte*t.*ml中配置數(shù)據(jù)庫--> <dependency> <groupId>mons-dbcp</groupId> <artifactId>mons-dbcp</artifactId> <version>1.2.2</version> </dependency> <!--JSTL標(biāo)簽類--> <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包都引入以后,首先進(jìn)展Spring與MyBatis的整合,然后再進(jìn)展JUnit測試,先看一個工程構(gòu)造圖:、建立JDBC屬性文件perties〔文件編碼修改為utf-8〕url=jdbc:mysql://11:8080/db_zslusername=demaopassword=demao*定義初始連接數(shù)initialSize=0*定義最接數(shù)ma*Active=20*定義最大空閑ma*Idle=20*定義最小空閑minIdle=1*定義最長等待時間ma*Wait=60000、建立spring-mybatis.*ml配置文件這個文件就是用來完成spring和mybatis的整合的。這里面也沒多少行配置,主要的就是自動掃描,自動注入,配置數(shù)據(jù)庫。注釋也很詳細(xì),大家看看就明白了。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> <!--連接池最大數(shù)量--> <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> <!--(事務(wù)管理)transactionmanager,useJtaTransactionManagerforglobalt*--> <beanid="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <propertyname="dataSource"ref="dataSource"/> </bean></beans>、Log4j的配置為了方便調(diào)試,一般都會使用日志來輸出信息,Log4j是Apache的一個開放源代碼工程,通過使用Log4j,我們可以控制日志信息輸送的目的地是控制臺、文件、GUI組件,甚至是套接口效勞器、NT的事件記錄器、UNI*
Syslog守護進(jìn)程等;我們也可以控制每一條日志的輸出格式;通過定義每一條日志信息的級別,我們能夠更加細(xì)致地控制日志的生成過程。
Log4j的配置很簡單,而且也是通用的,下面給出一個根本的配置,換到其他工程中也無需做多大的調(diào)整,如果想做調(diào)整或者想了解Log4j的各種配置,參看我的一篇博文,很詳細(xì):下面給出配置文件目錄:perties*定義LOG輸出級別log4j.rootLogger=INFO,Console,File*定義日志輸出目的地為控制臺log4j.appender.Console.Target=System.out*可以靈活地指定日志輸出格式,下面一行是指定具體的格式log4j.appender.Console.layout.ConversionPattern=[%c]-%m%n*文件大小到達(dá)指定尺寸的時候產(chǎ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測試經(jīng)過以上步驟〔到,log4j不配也沒影響〕,我們已經(jīng)完成了Spring和mybatis的整合,這樣我們就可以編寫一段測試代碼來試試是否成功了。、創(chuàng)立測試用表既然我們需要測試,則我們就需要建立在數(shù)據(jù)庫中建立一個測試表,這個表建的很簡單,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自動創(chuàng)立代碼參考博文:這個可根據(jù)表自動創(chuàng)立實體類、MyBatis映射文件以及DAO接口,當(dāng)然,我習(xí)慣將生成的接口名改為IUserDao,而不是直接用它生成的UserMapper。如果不想麻煩就可以不改。完成后將文件復(fù)制到工程中。如圖:、建立Service接口和實現(xiàn)類目錄構(gòu)造:下面給出具體的容: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接口對象注入,就可以進(jìn)展測試了。如果測試成功,表示Spring和Mybatis已經(jīng)整合成功了。輸出信息使用的是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)); }}測試結(jié)果:至此,完成Spring和mybatis這兩大框架的整合,下面在繼續(xù)進(jìn)展SpringMVC的整合。2.3、整合SpringMVC上面已經(jīng)完成了2大框架的整合,SpringMVC的配置文件單獨放,然后在web.*ml中配置整合。、配置spring-mvc.*ml配置里面的注釋也很詳細(xì),在此就不說了,主要是自動掃描控制器,視圖模式,注解的啟動這三個。<"*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認(rèn)為包下用了controller注解的類是控制器--> <conte*t:ponent-scanbase-package="..hnust.controller"/> <!--防止IE執(zhí)行AJA*時,返回JSON出現(xiàn)下載文件--> <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轉(zhuǎn)換器--> </list> </property> </bean> <!--定義跳轉(zhuǎn)的文件的前后綴,視圖模式配置--> <beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!--這里的配置我的理解是自動給后面action的方法return的字符串加上前綴和后綴,變成一個可用的url地址--> <propertyname="prefi*"value="/WEB-INF/jsp/"/> <propertyname="suffi*"value=".jsp"/> </bean> <!--配置文件上傳,如果沒有使用文件上傳可以不用配置,當(dāng)然如果不配,則配置文件中也不必引入上傳組件包--> <beanid="multipartResolver"class="org.springframework.web.multipart.mons.monsMultipartResolver"><!--默認(rèn)編碼--><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框架整合不需要在此處進(jìn)展任何配置。配置一樣有詳細(xì)注釋,不多解釋了。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監(jiān)聽器--> <listener> <listener-class>org.springframework.web.conte*t.Conte*tLoaderListener</listener-class> </listener> <!--防止Spring存溢出監(jiān)聽器--> <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,對應(yīng)struts的后綴習(xí)慣--> <url-pattern>/</url-pattern> </servlet-mapping> <wele-file-list> <wele-file>/inde*.jsp</wele-file> </wele-file-list></web-app>、測試至此已經(jīng)完成了SSM三大框架的整合了,接下來測試一下,如果成功了,則恭喜你,如果失敗了,繼續(xù)調(diào)試吧,作為程序員就是不停的與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配置.應(yīng)用路徑配置webAppRootKeyLog4j配置Log4jConfigLocationLog4jRefreshIntervalSpring上下文配置conte*tConfigLocationSpring字符集過濾器配置監(jiān)聽器配置org.springframework.web.conte*t.Conte*tLoaderListenerlog4j監(jiān)聽器配置3.springmvc-servlet.*ml配置啟動mvc注解驅(qū)動<mvc:annotation-driven/>組件scanner主要是自動去注入指定包里的對象<conte*t:ponent-scanbase-package=".los.mvc.controller"/>ViewResolver&View映射關(guān)系InternalResourceViewResolver基于resource對jsp/jstl的支持<beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"><propertyname="prefi*"value="/WEB-INF/views/"/><propertyname="suffi*"value=".jsp"/><!--InternalResourceViewResolverviewClass默認(rèn)值就是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>注冊事務(wù)管理器(Mybatis將事務(wù)轉(zhuǎn)交給Spring來管理)<beanid="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><propertyname="dataSource"ref="dataSource"/></bean>SqlSessionFactory配置(Mybatis核心是sqlSessionFactory來獲取orm處理對象,dataSource,mapperLocations配置mybaits自動生成的*ml文件.就是注入映射關(guān)系.)<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注解事務(wù)<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)只有g(shù)et方法才能訪問.ResponseBody自動將返回的封裝成json,方法返回值必須是map<String,">類型.RequestMapping(value="/doLogin")value=〞doLogin〞為訪問該方法的handlermappingreturn"login/login";會通過ViewResolver找到對應(yīng)的viewreturn"redirect:/user/toRegister.html";為spring-mvc的重定向.InitBinder()為綁定器,可以為request傳來的數(shù)據(jù)進(jìn)展數(shù)據(jù)類型轉(zhuǎn)換.數(shù)據(jù)自動驗證方法中參數(shù)需要有后面的兩個(ValidUseruser,BindingResultresult).Valid的支持標(biāo)準(zhǔn)是JSR,HibernateValidate4是對該標(biāo)準(zhǔn)比擬好的實現(xiàn).需要在Model類中配置驗證的注解.判斷驗證是否正確通過result.hasErrors()或者result.hasFieldErrors()來判斷,通過result.getAllErrors()或者result.getFieldErrors()來獲取Errors然后遍歷Errors獲取相關(guān)想要的信息,例如Error.getDeafaultMessage(),這個是獲取錯誤信息.具體的錯誤驗證機制還地在Model類中配置.屬性注解Autowired會為該屬性自動注入bean,默認(rèn)方式是byType.也可以用Resource這個注解默認(rèn)是byName.8.Service層配置.(業(yè)務(wù)層)
類注解Service為ponent的子注解,分工更明細(xì).Transactional可以為該業(yè)務(wù)類聲明一個全類的事務(wù).也可以將事務(wù)寫在方法上.根據(jù)不同的需要.方法注解Transactional(readOnly=true)Transactional(readOnly=false,propagation=Propagation.REQUIRED,rollbackFor=E*ception.class)類的事務(wù)聲明,可以設(shè)置隔離級別和傳播屬性,以及要回滾的異常名或者異常類,不需要回滾的異常名或者異常類.異常通常拋出給controller層來處理屬性注解AutowiredResource9.Repository層配置.(持久層DaoImpl)
類注解Repository為ponent的子注解,意為持久層,分工更明細(xì).一般不在這層處理事務(wù).10.Entry層配置(Model層)
類注解Entry驗證注解,常用的有:NotEmptyNotNullSize(min=2,ma*=10,message=〞**必須在{min}和{ma*}之間〞)EmailDecimalMa*AssertFalseAssertTrueNullValidURL(protocol=,host=,port=,rege*p=,flags=)一般情況下屬性或者方法可以放多個約束注解,hibernatevalidate會以隨機的順序去驗證這些約束.所以多個注解約束會有可能同一個屬性返回多個message.所以有時候需要只返回一條message,則需要使用驗證組Groups來達(dá)成.組別序列可以把一系列的組別按照一定的順序排列在一起,然后逐個驗證,只要有一個組別驗證失敗,就不繼續(xù)驗證剩余的組別。GroupSequence({User.class,GroupB.class,GroupC.class})驗證組的順序,約束里不指定group的為默認(rèn)的User.class組.約束組放在類前,User.class為默認(rèn)的約束組,GroupB,GroupC為空的接口.寫在User外同個java文件下.NotEmpty(message="密碼不能為空")Size(min=4,ma*=20,message="密碼長度必須在{min}-{ma*}圍",groups=GroupB.class)如果NotEmpty驗證失敗了,就不會繼續(xù)驗證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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年生物可降解塑料項目建議書
- 二零二五年度借調(diào)人員職業(yè)發(fā)展與離職交接協(xié)議
- 信息技術(shù)助力農(nóng)村發(fā)展合作合同書
- 某業(yè)務(wù)模塊操作指南
- 三農(nóng)科技示范推廣項目實施方案
- 小鴨子游泳故事解讀
- 2025年磷酸氧鈦鉀晶體(KTP)合作協(xié)議書
- 中學(xué)生課外閱讀經(jīng)驗交流征文
- 小公主童話故事解讀征文
- 文化藝術(shù)品保護及版權(quán)授權(quán)合同
- 2025年買賣雙方合同模板
- 最專業(yè)的企業(yè)介紹模板課件
- 2025國家電投集團資本控股限公司本部招聘11人高頻重點模擬試卷提升(共500題附帶答案詳解)
- 2025年湖南中醫(yī)藥高等??茖W(xué)校高職單招職業(yè)技能測試近5年常考版參考題庫含答案解析
- 2025新人教版英語七年級下單詞英譯漢默寫表(小學(xué)部分)
- 《聯(lián)合國教科文:學(xué)生人工智能能力框架》-中文版
- 2023年部編人教版六年級道德與法治下冊全冊課件【完整版】
- 第1課 古代亞非(教學(xué)課件)-【中職專用】《世界歷史》同步課堂(同課異構(gòu))(高教版2023?基礎(chǔ)模塊)
- 煙草栽培(二級)鑒定理論考試復(fù)習(xí)題庫-下(多選、判斷題匯總)
- 2008 年全國高校俄語專業(yè)四級水平測試試卷
- 需求供給與均衡價格PPT課件
評論
0/150
提交評論