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中央仓库搜索,就能够找到对应的三坐标啦。
Maven我们就说这么多,过多的细节就不在这里展开讲了,欢迎大家关注后续的文章。
这篇文章就到这里,下篇文章将开始展开配置文件的讲解,敬请期待!

发表评论

电子邮件地址不会被公开。 必填项已用*标注