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包,每个包的是干什么的都有注释,就不再多说了。
-->
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"> 8 class="tionMethodHandlerAdapter"> 器 -->
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"> Application class>cherServlet name> -> 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. 5. 6. 7. 8. 9. 10. 11. 12. 13. <4j-version>1.6.64j-version> 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. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 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. 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. 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
版权声明:本文标题:SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1702794063h431181.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论