首先要了解一个概念,SSM框架就是Spring+SpringMVC+MyBatis的整合,既然是整合,那么你就应该了解一下,拆分出来的每一项的大致是干什么的,先有个概念才好往下走。
Spring
Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
按照我的经验来看,Spring他就是一个容器,你按照一定的规则,将数据库的一系列接口都放进去,填充这个容器。你可以把Spring看成是这个装切片面包的包装袋,把这些切片面包整合在一起,等你想要使用Spring里的数据库接口时,那你就打开包装袋,取出你需要的那块面包,而那块面包就是你需要的接口
SpringMVC
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。
就是使用SpringMVC的规则分配MVC,相当于SpringMVC帮你封装好了一系列方法,免去了你自己去封装的时间,提高了效率
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对象)映射成数据库中的记录
简单来说嘛,就是MyBatis是用来处理数据库这部分的框架,不再使用jdbc的复杂操作,而是使用XML和注解将接口和 Java POJOs(按我的理解POJO就是数据实体类)映射成数据库中的记录。类似于Android的关系映射模型,非常好理解。
对这三个东西有了一定的了解后,我们来看看具体的搭建吧。
SSM框架的搭建
SSM项目通常使用Maven来进行整合,那我们就来创建一个Maven工程
点击finish完成创建,创建后你就会发现webapp下竟然什么都没有,什么都没有tomcat怎么跑的起来?教你个技巧,右键点击项目,点击最下面的那个properties,在左边框框里选择project face,把Dynamic Web Module上钩去掉,再选上,他在底部就会显示一行further configuration available,你将WebContent改成src/main/webapp,ok,是不是发现webapp下有东西了,那么一个maven项目就建好了。但是仍然有配置需要你更改,比如创建出来的项目默认支持JDK1.5,你要改一下,改成1.7以上的版本,怎么改版本我就不多说了,网上多的是教程。还有就是你需要更改一下maven的setting文件,点击window下的preference,找到Maven,他下面有一个setting,根据他给你的地址找到这个这个文件,并用文本编辑器(比如notepad++)打开它,找到mirrors并添加下面这段话,这段话的意思就是让你采用阿里云镜像,用了之后你以后添加jar包啊什么的下载速度嗖嗖的,毕竟是国内大公司的镜像,确实不错
还有一个配置是将你所拥有的JDK信息按照这个格式也加入setting文件中,配置好这些东西后,这已经是一个可以用的Maven项目了。好,那我们接着往下走
接下来,你将体会到Maven的优势,就和Android的引入框架一样,操作简单还非常好用
这个就是引入jar包的过程,有两点要说的,第一个你的dependency要写在dependencies中,第二个你的dependency是哪来的?一个一个手敲得累死你,复制别人博客上的?确实是一种好方法,但是别人博客上的又是从哪来的呢?我告诉你是从哪来的啊,给你开启新世界的大门。
打开百度搜索mvn repository,点击第一个,在搜索框中你就可以搜到你想要的所有东西!比如说我要找spring webmvc
点击其中的一个版本
没错,就是这么简单,接下来你要依次将spring webmvc,spring jdbc,spring aspect(这几个东西版本要对应)mybatis,mybatis Spring(mybatis和spring的适配包),c3p0,mysql(oracle的驱动有点特殊,需要导本地的),jstl,servlet-api(这个需要给scope属性加provided),junit的配置信息添加进pom文件中
接下来是重头戏,要说web.xml,spring,spring-mvc,mybatis
首先是web.xml(配置Spring,SpringMVC,字符编码过滤器)
关键是applicationContext.xml的这个路径他是在 项目名/src/main/resources下的,不要搞错位置也不要弄错名字,不让名字错的最好方法就是复制粘贴
接下来,你需要在web.xml同级目录下创建Spring的配置文件,名字是当前servlet(dispatcher)-servlet.xml
配置字符串编码过滤器,这个没什么好说的,照着做就行
这个可有可无,这个的作用是如果你使用Rest风格的URI请求,就将普通请求转化为delete或者put
接下来是SpringMVC(只扫描控制器,配置视图解析器,必备的两个配置)
需要use-default-filters="false"来解除默认的扫描方法,让他只扫描Controller
配置视图解析器,路径是/WEB-INF/view/,类型是.jsp,这路径的看你怎么定义了,像我这样的应该比较常见
这两条语句是必备的,不写的话很多功能都会出错
接下来是Spring(配置数据源,与mybatis整合,事务控制)
这里使用了c3p0,并给这个bean设置了id,这里的value值都是取自src/main/resources下的jdbc.properties,千万不要放错了,第一个红色代表你的SID(数据库连接名),第二第三表示用户名和密码
这里是Spring和Mybatis的整合,创建一个bean,他的class是SqlSessionFactoryBean,这步很关键务必要配好,不然可能会出现各种各样稀奇古怪的错误。在src/main/resources下配置mybatis-config.xml,mybatis-config.xml是一会要说的mybatis的配置文件。还要配数据源dataSource,这里用的是上面c3p0的id。最后配mapperLocations,他的路径是src/main/resources/mapper下的所有xml文件,你千万不能填错,特别是用了自动生成mapper和实体类的工具的时候,他会在src/main/java下生成一个mapper文件夹,我曾经就把这个空文件夹的地址放入其中,把自己搞得焦头烂额
配置扫描器将所有的dao包下的接口添入spring容器中,这个的话你只要注意他的name和value就好,这个value你就复制(ctrl+c)一下自己的包再粘贴过来
这里是配置事务控制,首先要获取数据源,我获取的是我自己配上的c3p0,其中execution(* com.crud.service..*(..))这个你需要了解一下。execution是切入点指示符,是必须要有的东西,com.crud.service表示你的切入点是在这个service包下,这个".."表示就算是这个包下的子包也配置了事务控制,"*"表示所有的内容,"(..)"表示任意参数
这里是配置事务增强,以get开头的所有方法都会得到一定的优化,增强需要在advisor中引入,还有就是事务控制id的要和事务增强的id一致,方便控制事务的细节
这是最后一个,Mybatis(一些设置,起个别名)
还记不记得我们在Spring中配置了一个mybatis-config.xml?我们就在这个文件下配置我们的Mybatis,那么怎么配呢?我们来看看官网吧,在百度中搜索mybatis,打开第一个网页,你可以看到一个忍者鸟
点击"getting start",把框起来的这部分复制到mybatis-config.xml,你可能会好奇这个东西是什么?为什么需要他?没有他又会怎么样?
!DOCTYPE是一种标准通用标记语言的文档类型声明,它的目的是要告诉标准通用标记语言解析器,它应该使用什么样的文档类型定义(DTD)来解析文档。你可以简单理解为mybatis规定了一定的规则让你来写这个配置文件,把他加入mybatis后你就可以自动补全出configuration等配置标签,没有这个规则那些配置标签肯定还是能生效,因为你已经在maven中已经添加了mybatis的jar包,但是你一个一个的手打标签效率就很低了
在configuration中加入setting设置,这个的意思就是让你的命名遵守驼峰规则,驼峰规则你要是不知道就百度一下吧,setting肯定也不止这么一个,你可以点开Configuration XML,他这里有个setting
你点进这个setting之后你就可以看到各种各样的设置,这个就根据你项目的需求来定了
你还可以设置一下类型别名,方便我们引用
至此,一个SSM项目的整合已经完成了!我再加一点额外知识,关于MyBatis的逆向工程,逆向工程听着高大上,其实就是根据你的数据库里的表生成对应的实体类以及mapper(数据库层面的具体操作,例如增删改查),所需道具就是MyBatis Generator
MyBatis Generator
百度搜索MyBatis Generator,打开他,看一下
你会发现这个界面和MyBatis的一样,其实我就是懒得在官网里点而已....好的,我们点一下Running MyBatis Generator With Maven,开启我们的逆向工程
因为我们使用了Maven,我可以用Maven来导入他,去Maven Repository,搜索MyBatis Generator,找个最新的版本添加进pom.xml中
选择这一项,你就会看到一个例子,在项目的根目录下创建一个mbg.xml,将他复制进来,复制进来以后你要将示例改为你自己的设置
将数据库连接信息改为自己的
将实体类的信息配上,自己的包名和地址,到时候它自动生成的实体类就放在这个包下
设置好你要生成的mapper要放在哪,也是更改包名和地址
设置好你要生成的dao他放在那,依旧是更改包名和地址
最后这个tableName是数据库的表名(数据库里表名是什么你就是什么,一字不要差),domainObjectName是实体类的名字(自己取名,最后别取的和数据库的表名一模一样,出错了也不好分辨)
最后就是试一试能否自动生成,这五种方法都可以运行MBG,你是用哪一种都没有问题,反正他都有例子
反正我用的Java代码的方式,你在写java的地方创建一个类,给他一个主函数,把List那一长串放进去,导包,把new File("generatorConfig.xml");里的xml改成你自己创建的mbg.xml,右键点击main,点击Run as再点击Java Application,然后刷新一下项目,你的项目下就会多了很多自动生成的代码。