admin 管理员组

文章数量: 887021


2023年12月17日发(作者:required中文)

SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)

使用SSM(Spring、SpringMVC和Mybatis)已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方。之前没有记录SSM整合的过程,这次刚刚好基于自己的一个小项目重新搭建了一次,而且比项目搭建的要更好一些。以前解决问题的过程和方法并没有及时记录,以后在自己的小项目中遇到我再整理分享一下。这次,先说说三大框架整合过程。个人认为使用框架并不是很难,关键要理解其思想,这对于我们提高编程水平很有帮助。不过,如果用都不会,谈思想就变成纸上谈兵了!!!先技术,再思想。实践出真知。(可通过图片水印查看博客地址)

1、基本概念

1.1、Spring

Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,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 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

2、开发环境搭建

如果需要,参看之前的博文:/zhshulin/article/details/30779873

3、Maven Web项目创建

如果需要,参看之前的博文:/zhshulin/article/details/37921705

4、SSM整合

下面主要介绍三大框架的整合,至于环境的搭建以及项目的创建,参看上面的博文。这次整合我分了2个配置文件,分别是,包含spring和mybatis的配置文件,还有个是spring-mvc的配置文件,此外有2个资源文件:tis和ties。完整目录结构如下:

使用框架都是较新的版本:

Spring 4.0.2 RELEASE

Spring MVC 4.0.2 RELEASE

MyBatis 3.2.6

2.1、Maven引入需要的JAR包

为了方便后面说的时候不需要引入JAR包,我这里直接给出所有需要的JAR包,这都是基本的JAR包,每个包的是干什么的都有注释,就不再多说了。

-->

junit

junit

4.11

E

3.2.6

1.7.7

1.2.17

test

framework

spring-core

${n}

framework

spring-web

${n}

framework

spring-oxm

${n}

framework

spring-tx

${n}

framework

spring-jdbc

${n}

framework

spring-webmvc

${n}

framework

spring-aop

${n}

framework

spring-context-support

framework

spring-test

${n}

${n}

s

mybatis

${n}

s

mybatis-spring

1.2.2

javax

javaee-api

7.0

mysql

mysql-connector-java

5.1.30

commons-dbcp

commons-dbcp

1.2.2

jstl

jstl

1.2

log4j

log4j

${n}

a

fastjson

1.1.41

4j

slf4j-api

${n}

4j

slf4j-log4j12

${n}

n

jackson-mapper-asl

1.9.13

commons-fileupload

commons-fileupload

1.3.1

commons-io

commons-io

2.4

commons-codec

commons-codec

1.9

2.2、Spring与MyBatis的整合

所有需要的JAR包都引入以后,首先进行Spring与MyBatis的整合,然后再进行JUnit测试,先看一个项目结构图:

2.2.1、建立JDBC属性文件

ties(文件编码修改为utf-8)

driver=

url=jdbc:mysql://10.221.10.111:8080/db_zsl

username=demao

password=demao

#定义初始连接数

initialSize=0

#定义最大连接数

maxActive=20

#定义最大空闲

maxIdle=20

#定义最小空闲

minIdle=1

#定义最长等待时间

maxWait=60000

2.2.2、建立配置文件

这个文件就是用来完成spring和mybatis的整合的。这里面也没多少行配置,主要的就是自动扫描,自动注入,配置数据库。注释也很详细,大家看看就明白了。

xmlns:xsi="/2001/XMLSchema-instance"

xmlns:p="/schema/p"

xmlns:context="/schema/context"

xmlns:mvc="/schema/mvc"

xsi:schemaLocation="/schema/beans

/schema/beans/

/schema/context

/schema/context/

/schema/mvc

/schema/mvc/">

class="tyPlaceholderConfigurer">

value="classpath:ties" />

class="ataSource"

destroy-method="close">

value="${driver}" />

/>

/>

value="${initialSize}">

value="${maxActive}">

value="${maxIdle}">

value="${minIdle}">

value="${maxWait}">

-->

value="classpath:com/cn/hnust/mapping/*.xml">

class="ScannerConfigurer">

value="" />

value="sqlSessionFactory">

class="urceTransactionManager">

2.2.3、Log4j的配置

为了方便调试,一般都会使用日志来输出信息,Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。

Log4j的配置很简单,而且也是通用的,下面给出一个基本的配置,换到其他项目中也无需做多大的调整,如果想做调整或者想了解Log4j的各种配置,参看我转载的一篇博文,很详细:

/zhshulin/article/details/37937365

下面给出配置文件目录:

ties

#定义LOG输出级别

gger=INFO,Console,File

#定义日志输出目的地为控制台

e=eAppender

=

#可以灵活地指定日志输出格式,下面一行是指定具体的格式

=

nLayout

sionPattern=[%c] - %m%n

#文件大小到达指定尺寸的时候产生一个新的文件

= gFileAppender

#指定输出目录

= logs/

#定义文件最大大小

eSize = 10MB

# 输出所以日志,如果换成DEBUG表示输出DEBUG以上级别日志

old = ALL

= nLayout

sionPattern =[%p] [%d{yyyy-MM-dd HH:mm:ss}][%c]%m%n

2.2.4、JUnit测试

经过以上步骤(到4.2.2,log4j不配也没影响),我们已经完成了Spring和mybatis的整合,这样我们就可以编写一段测试代码来试试是否成功了。

2.2.4.1、创建测试用表

既然我们需要测试,那么我们就需要建立在数据库中建立一个测试表,这个表建的很简单,SQL语句为:

DROP TABLE IF EXISTS `user_t`;

CREATE TABLE `user_t` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`user_name` varchar(40) NOT NULL,

`password` varchar(255) NOT NULL,

`age` int(4) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

/*Data for the table `user_t` */

insert into `user_t`(`id`,`user_name`,`password`,`age`)

values (1,'测试','sfasgfaf',24);

2.2.4.2、利用MyBatis Generator自动创建代码

参考博文:/zhshulin/article/details/23912615

这个可根据表自动创建实体类、MyBatis映射文件以及DAO接口,当然,我习惯将生成的接口名改为IUserDao,而不是直接用它生成的UserMapper。如果不想麻烦就可以不改。完成后将文件复制到工程中。如图:

2.2.4.3、建立Service接口和实现类

目录结构:

下面给出具体的内容:

package e;

import ;

public interface IUserService {

}

public User getUserById(int userId);

package ;

import ce;

import e;

import ao;

import ;

import ervice;

@Service("userService")

public class UserServiceImpl implements IUserService {

@Resource

private IUserDao userDao;

@Override

public User getUserById(int userId) {

}

// TODO Auto-generated method stub

return ByPrimaryKey(userId);

}

2.2.4.4、建立测试类

测试类在src/test/java中建立,下面测试类中注释掉的部分是不使用Spring时,一般情况下的一种测试方法;如果使用了Spring那么就可以使用注解的方式来引入配置文件和类,然后再将service接口对象注入,就可以进行测试了。

如果测试成功,表示Spring和Mybatis已经整合成功了。输出信息使用的是Log4j打印到控制台。

package batis;

import ce;

import ;

import ;

import ;

import h;

import ationContext;

import

athXmlApplicationContext;

import tConfiguration;

import

JUnit4ClassRunner;

import ;

import ;

import ervice;

@RunWith()

SpringJUnit4ClassRunner类

@ContextConfiguration(locations = {"classpath:"})

public class TestMyBatis {

private static Logger logger =

//表示继承了ger();

//

//

//

//

@Before

public void before() {

ac = new

private ApplicationContext ac = null;

@Resource

private IUserService userService = null;

ClassPathXmlApplicationContext("");

// userService = (IUserService)

n("userService");

//

}

@Test

public void test1() {

}

User user = rById(1);

// n(rName());

// ("值:"+rName());

(String(user));

}

测试结果:

至此,完成Spring和mybatis这两大框架的整合,下面在继续进行SpringMVC的整合。

2.3、整合SpringMVC

上面已经完成了2大框架的整合,SpringMVC的配置文件单独放,然后在中配置整合。

2.3.1、配置

配置里面的注释也很详细,在此就不说了,主要是自动扫描控制器,视图模式,注解的启动这三个。

xmlns:xsi="/2001/XMLSchema-instance"

xmlns:p="/schema/p"

xmlns:context="/schema/context"

xmlns:mvc="/schema/mvc"

xsi:schemaLocation="/schema/beans

/schema/beans/

/schema/context

/schema/context/

/schema/mvc

/schema/mvc/">

class="gJacksonHttpMessageConverter">

text/html;charset=UTF-

8

class="tionMethodHandlerAdapter">

器 -->

bean="mappingJacksonHttpMessageConverter" />

class="alResourceViewResolver">

/>

class="sMultipartResolver">

2.3.2、配置文件

这里面对的引入以及配置的spring-mvc的Servlet就是为了完成SSM整合,之前2框架整合不需要在此处进行任何配置。配置一样有详细注释,不多解释了。

xmlns="/xml/ns/javaee"

xsi:schemaLocation="/xml/ns/javaee

/xml/ns/javaee/web-app_3_"

version="3.0">

Archetype Created Web

Application

contextConfigLocation

classpath:

encodingFilter

terEncodingFilter

true

encoding

UTF-8

encodingFilter

/*

tLoaderListener

pectorCleanupListener

SpringMVC

class>cherServlet

name>

classpath:spring-

contextConfigLocation

1

true

->

SpringMVC

value="ew">

自定义拦截器配置

name="viewClass"

国际化配置

id="messageSource"

class="ceBundleMessageSource">

4. Spring上下文 -- 配置

支持注解

class="tionMethodHandlerAdapter">

class="tAnnotationHandlerMapping">

配置@service 和 @Repository

5. Mybatis3.0.5-Spring 整合 --

DataSource配置

class="ManagerDataSource">

id="dataSource"

注册事务管理器(Mybatis将事务转交给Spring来管理)

SqlSessionFactory配置(Mybatis核心是sqlSessionFactory来获取orm处理对象, dataSource,

mapperLocations配置mybaits自动生成的xml文件.就是注入映射关系.)

MapperScanner配置.自动去搜索mapper里的对象,并注入.

启动Spring注解事务

id="transactionManager"

class="urceTransactionManager">

6. mybatis自动生成器配置 --

sqlMapGenerator 生成器

javaClientGenerator ModelDao生成器

javaModelGenerator Model生成器

运行会自动生成mybatis代码.然后再配置

7. Controller层配置

类注解

@Controller

@RequestMapping("/json")为访问该层的路径.

方法注解

@RequestMapping(method = ) 只有get方法才能访问.

@ResponseBody 自动将返回的封装成json,方法返回值必须是map类型.

@RequestMapping(value="/doLogin") value=”doLogin”为访问该方法的handler mapping

return "login/login";会通过ViewResolver找到对应的view

return "redirect:/user/";为spring-mvc的重定向.

@InitBinder()为绑定器,可以为request传来的数据进行数据类型转换.

数据自动验证

方法中参数需要有后面的两个(@Valid User user,BindingResult result).@Valid的支持标准是JSR,Hibernate Validate 4是对该标准比较好的实现.需要在Model类中配置验证的注解.判断验证是否正确通过ors()或者ldErrors()来判断,通过Errors()或者ldErrors()来获取Errors然后遍历Errors获取相关想要的信息,例如faultMessage(),这个是获取错误信息.具体的错误验证机制还地在Model类中配置.

属性注解

@Autowired 会为该属性自动注入bean,默认方式是byType.也可以用@Resource这个注解默认是byName.

8. Service层配置.(业务层)

类注解

@Service 为@Component的子注解,分工更明细.

@Transactional 可以为该业务类声明一个全类的事务.也可以将事务写在方法上.根据不同的需要.

方法注解

@Transactional(readOnly = true)

@Transactional(readOnly = false, propagation = ED, rollbackFor =

) 类的事务声明,可以设置隔离级别和传播属性,以及要回滚的异常名或者异常类,不需要回滚的异常名或者异常类.异常通常抛出给controller层来处理

属性注解

@Autowired @Resource

9. Repository层配置.(持久层DaoImpl)

类注解

@Repository 为@Component的子注解,意为持久层,分工更明细.一般不在这层处理事务.

层配置(Model层)

类注解

@Entry

验证注解,常用的有:

@NotEmpty

@NotNull

@Size(min=2,max=10,message=”xx必须在{min}和{max}之间”)

@Email

@DecimalMax

@AssertFalse @AssertTrue

@Null

@Valid

@URL(protocol=,host=, port=,regexp=, flags=)

一般情况下属性或者方法可以放多个约束注解,hibernate validate会以随机的顺序去验证这些约束.所以多个注解约束会有可能同一个属性返回多个message.所以有时候需要只返回一条message,则需要使用验证组Groups来达成.组别序列可以把一系列的组别按照一定的顺序排列在一起,然后逐个验证,只要有一个组别验证失败,就不继续验证剩余的组别。

@GroupSequence({,,})验证组的顺序,约束里不指定group的为默认的组.

约束组放在类前,为默认的约束组,GroupB,GroupC为空的接口.写在User外同个java文件下.

@NotEmpty(message="密码不能为空")

@Size(min=4,max=20,message="密码长度必须在{min}-{max}范围内",groups =

)

如果@NotEmpty验证失败了,就不会继续验证@Size

配置实例演示

最近做了个maven管理的springmvc+spring+mybatis,还用到了阿里巴巴的 fastjson和druid连接池,配置文件如下

文件

[html] view plaincopy

1.

2.

3. xsi:schemaLocation="/POM/4.0.0 /maven-v4_0_">

4. 4.0.0

5.

6. um

7. war

8. 1.0.0-BUILD-SNAPSHOT

9.

10. 1.7

11. E

12. 1.6.10

13. <4j-version>1.6.6

14.

15.

16.

17.

18. framework

19. spring-context

20. ${framework-version}

21.

22.

23.

24. commons-logging

25. commons-logging

26.

27.

28.

29.

30. framework

31. spring-webmvc

32. ${framework-version}

33.

34.

35. framework

36. spring-jdbc

37. ${framework-version}

38.

39.

40.

41.

42. j

43. aspectjrt

44. ${j-version}

45.

46.

47.

48.

49. 4j

50. slf4j-api

51. ${4j-version}

52.

53.

54. 4j

55. jcl-over-slf4j

56. ${4j-version}

57. runtime

58.

59.

60. 4j

61. slf4j-log4j12

62. ${4j-version}

63. runtime

64.

65.

66. log4j

67. log4j

68. 1.2.15

69.

70.

71.

72. mail

73.

74.

75.

76. jms

77.

78.

79.

80. jmxtools

81.

82.

83.

84. jmxri

85.

86.

87. runtime

88.

89.

90.

91.

92.

93.

94. 1

95.

96.

97.

98.

99. t

100. servlet-api

101. 2.5

102. provided

103.

104.

105.

106. jsp-api

107. 2.1

108. provided

109.

110.

111. t

112. jstl

113. 1.2

114.

115.

116.

117. s

118. mybatis

119. 3.2.1

120.

121.

122. s

123. mybatis-spring

124. 1.2.0

125.

126.

127. mysql

128. mysql-connector-java

129. 5.1.26

130.

131.

132.

133.

134.

135.

136. junit

137. junit

138. 4.7

139. test

140.

141.

142. a

143. druid

144. 0.2.20

145.

146.

147.

148. j

149. aspectjweaver

150. 1.7.2

151.

152.

153. a

154. fastjson

155. 1.1.34

156.

157.

158.

159. jackson-core

160. 2.2.2

161.

162.

163.

164. jackson-databind

165. 2.2.2

166.

167.

168. commons-fileupload

169. commons-fileupload

170. 1.2.2

171.

172.

173.

174.

175.

176.

177.

178.

179.

180.

181.

182.

183.

184.

185. maven-eclipse-plugin

186. 2.9

187.

188.

189. nature

190.

191.

192. builder

193.

194. true

195. true

196.

197.

198.

199. s

200. maven-compiler-plugin

201. 2.5.1

202.

203. 1.6

204. 1.6

205. -Xlint:all

206. true

207. true

208.

209.

210.

211.

212. exec-maven-plugin

213. 1.2.1

214.

215.

216.

217.

218.

219.

220. demo-um

221.

[html] view plaincopy

1.

2.

3. xmlns:xsi="/2001/XMLSchema-instance"

4. xsi:schemaLocation="/xml/ns/javaee /xml/ns/javaee/web-app_2_">

5.

6.

7.

8.

9.

10. contextConfigLocation

11. /WEB-INF/spring/

12.

13.

14.

15. encodingFilter

16. terEncodingFilter

17.

18. encoding

19. UTF-8

20.

21.

22. forceEncoding

23. true

24.

25.

26.

27. encodingFilter

28. /*

29.

30.

31.

32. tLoaderListener

33.

34.

35.

36.

37.

38.

39.

40. appServlet

41. cherServlet

42.

43. contextConfigLocation

44. /WEB-INF/spring/appServlet/

45.

46. 1

47.

48.

49.

50. appServlet

51. /

52.

53.

54.

spring的主配置文件

[html] view plaincopy

1.

2.

3. xmlns:xsi="/2001/XMLSchema-instance"

4. xmlns:context="/schema/context"

5. xsi:schemaLocation="/schema/beans /schema/beans/

6. /schema/context /schema/context/

7. ">

8.

9.

10.

11.

springmvc的主配置文件

[html] view plaincopy

1.

2.

3. xmlns:xsi="/2001/XMLSchema-instance"

4. xmlns:beans="/schema/beans"

5. xmlns:context="/schema/context"

6. xsi:schemaLocation="/schema/mvc /schema/mvc/

7. /schema/beans /schema/beans/

8. /schema/context /schema/context/">

9.

10.

11.

12.

13.

14.

15.

16.

17.

18.

19.

20.

21.

22.

23.

24.

25.

26.

27.

28.

29.

30.

31.

32.

33.

34.

35.

36.

37.

38.

39.

40.

41.

42.

43.

44.

45.

46.

mybatis的配置文件,数据源用 的是阿里巴巴的 druid

[html] view plaincopy

1.

2.

3. xmlns:xsi="/2001/XMLSchema-instance"

4. xmlns:context="/schema/context"

5. xmlns:tx="/schema/tx"

6. xmlns:aop="/schema/aop"

7. xsi:schemaLocation="/schema/beans /schema/beans/

8. /schema/context /schema/context/

9. /schema/tx /schema/tx/

10. /schema/aop /schema/aop/

11. ">

12.

13.

14.

15.

16.

17.

18.

19.

20.

21.

22.

23.

24.

25.

26.

27.

28.

29.

30.

31.

32.

33.

34.

35.

36.

37.

38.

39.

40.

41.

42.

43.

44.

45.

46.

47.

48.

49.

50.

51.

52.

53.

54.

55.

56.

57.

58.

59.

60.

61.

62.

63.

64.

65.

66.

67.

68.

69.

70.

71.

72.

73.

74.

75.

76.

77.

78.

79.

80.

81.

82.

83.

84.

85.

转载注明:

/zhshulin

/chenying99/archive/2012/03/04/

/qyl445/article/details/9837579


本文标签: 配置 文件 注解 自动 整合