Spring+SpringMVC+Mybatis整合开发思路及配置详解

前言

说起来还是比较有意思的,最近一个同学问我SSM(Spring+SpringMVC+Mybatis)整合开发,整体的思路和配置究竟是怎么个思路。这不禁让我想起了我一开始做SSM整合开发的苦逼时间。本以为不就是个框架吗,有啥难的。但后来真的发现自己动手做起来真的很不简单,尤其是对于新手同学来说。

于是我想,百度一下肯定是能够找到整合开发的例子吧。不幸的是,这些教程看起来很高大上,但是实际操作起来,不是缺包就是配置文件本身存在问题,再有就是代码根本就没有贴全。除了这些问题,仅有少数能够配置成功的文章,更是根本连配置信息、代码的解释都没有……

我心想,算了,还是自己手动撸一篇文章吧。于是,就有了接下来的这些内容。

本文,主要是针对已经学过Spring,了解SpringMVC和Mybatis的同学。 如果这些还暂时不了解,没关系,先去找些视频或者书籍看看SSM的相关知识再来(笑)。

我们以一个小型的项目作为依托,先介绍此项目的整体架构和用到的技术,并让你知道每个部分的作用;接着,我将介绍引入的jar文件(Maven),并带你大致了解一下Maven是个啥;接着就是配置文件,我将详细介绍配置文件的作用,以及为啥这样配置;最后,我们将实现一个查询的小功能。

这个文章将分成两篇,因为比较长,希望大家多谢耐心。

废话不多说,开始吧!

回顾内容

这小节,主要带你回顾下整合开发遵循的模式以及SSM三框架在其中的身份。

1)MVC开发模式: 你肯定知道,现在的B/S系统大多都是遵从MVC的开发模式开发的。M就是Model,模型层,负责数据的存储,就是代码中的类,最早的时候必须符合JavaBean的规范;V就是View,视图层,负责信息的展示,就是用户看到的应用页面;C就是Controller,控制器,这一层做的主要是逻辑层的操作,比如用户登录的后台代码,当然现在的逻辑层,在开发的过程中是由dao、service和controller共同组成的。

2)SSM这三者的作用分别是什么呢?

以前我一直天真的认为,SSM这三者的作用大致上应该是对应着MVC的,但是我错了,而且还错的离谱。这么说虽然有一定的依据,但是真的不准确。

Spring,实际上是一个Bean(各种类都能称为Bean)的超级大工厂,只要是代码中哪里需要用到某个类,直接和Spring要就可以了。而以前我们只能用到哪个类就new一个,或者通过工厂模式。实际上这个大工厂被我们称作IOC(依赖注入),就是生成类的某种方式,这大大降低了代码的耦合性。这里就能看到,硬说Spring是M层的也没啥毛病,但是Spring不但管理着以前的JavaBean,同样还管理着Dao层的类,这就有一些不一样了。关于这一点,我们后面的文章会说明。

SpringMVC,说SpringMVC是视图层的,这是肯定的。如果你用过Servlet+JSP的开发模式,你一定非常清楚,想要在一个JSP页面中绑定数据(数据显示在页面中),实际上是非常困难的,需要通过request的setAttribute方法,然后JSP页面上再来一个request.id之类的东西,总之非常不方便。还有就是Controller接收参数,如果要接收参数的话,Servlet的开发只能在get或者post方法中写参数的名字。如果参数非常多,可想而知,这得多么复杂。SpringMVC就非常简单了,如果我们想要接收很多参数的话,直接就能把这些参数封装在一个类中,把类放到参数的位置就好了,SpringMVC就会自动帮助我们完成参数接收的过程,非常方便。实际上,在这个过程中,依然有Spring框架中IOC模块的支持。

Mybatis,同样的,mybatis只能算作是Controller层中的一部分,即dao。dao也叫做持久层,作用就是将数据持久化到数据库之类的东西里面,也就是ORM框架。Mybatis非常好用,以前我们做开发的时候,一般都是写JSBC,就算不直接用JDBC,还是会用DBUtils之类的数据库组件,但是这些组件并不灵活,稍微有些问题就无法读取或写入数据到数据库。Mybatis的出现大大解决了这个问题。同样作用的框架还有Hibernate,但是它和Mybatis相比就太臃肿了(Spring同样可以整合Hibernate)。

好了,下面我们就来看看这三大框架究竟是如何无缝的组合在一起的吧。

整合的整体架构

我们先来说一下项目的目录结构。

在这个小的web项目中,大的目录分成了java、resources、webapp三部分。

java中有bean,这个目录是存放和数据库对应的基本类的;controller,这里面是存放控制器类的,这就类似于之前Servlet的作用;dao,这是存放数据库映射文件的,功能和之前的JDBC相同,最后是service,服务层,controller负责处理逻辑操作,service负责的是和dao层交互,实现具体的功能,比如插入一条数据之类的。

resources,资源路径,多数的配置文件和Mybatis的映射文件都放在这里,具体的作用在后面就会见分晓了。

webapp,这里面的内容和之前的开发一样,只是多出来一个SpringMVC的配置文件

知道了上面目录结构的功能,就能看下面这张结构图了:


我们将整体的结构分成了五个部分,分别是前端页面、Spring容器、数据库连接池、数据库(这两部分其实可以合成一部分)、Maven依赖管理。

完成一个web请求的个过程大致如下:

前端页面发起一个http请求:localhost:8080/user

http请求被Tomcat服务器得到,接着到Servlet中寻找映射路径,当然有了SpringMVC就无需去执行复杂的配置了,我们可以像Servlet3.0那样使用注解开发,SpringMVC前端控制器的注解是@RequestMapping("/user"),通过请求的url,寻找映射路径,找到对应Controller类的方法

在Controller中,注入了诸多的Service,Controller可以直接调用这些service进行操作

controller调用Service后,Service就要执行对应的方法,在Service中同样注入了dao层的mapper,即可调用相应的mapper方法执行数据库操作

mybatis中,dao层分成两部分,分别是接口和mapper映射文件,调用mapper接口方法的时候,就会去找到对应方法的映射,这些映射就是执行数据库操作的语句,本质上还是sql语句

项目肯定是有很多的依赖文件的,比如springframwork,现在有了Maven就不需要我们手动导入了,只需要在Maven中配置即可。

完成controller操作以后,再通过SpringMVC前端控制器控制页面跳转或者重定向之类的操作,但是现在一般使用ajax技术,提高前端页面的性能。

整个请求过程经历的各个模块,我想我已经说的很清楚了。其中最为核心的是Spring,Spring管理着这些类,供其他类完成依赖注入。

Maven依赖管理

我们之前开发的时候,是需要手动的将一个个的类导入到我们的工作空间中,然后才能进行正常的代码编写。尽管如此,有时候还是会出现一些诸如ClassNotFountException之类的异常。

Maven的出现改变了这种情况,我们只需要配置文件,就能够很方便的将jar文件导入到我们的工作空间中,同时还能够实现将项目打成war包的操作,更加简便了我们的开发。

其实Maven的配置文件的核心就一个(个人认为),即三坐标。那么,三坐标是什么呢?我们来简单的看一段Maven的配置文件:

<dependencies>

<!-- 数据库连接池、驱动 -->

    <!-- https://mvnrepository.com/artifact/c3p0/c3p0 -->

    <dependency>

      <groupId>c3p0</groupId>

      <artifactId>c3p0</artifactId>

      <version>0.9.1</version>

    </dependency>

</dependencies>

这里我们引入的jar文件就是C3P0数据库连接池文件,可以看到,所谓的三坐标就是groupId、artifactId、version。如果我们需要引入一个jar文件,只需要去Maven中央仓库搜索,就能够找到对应的三坐标啦。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343