正文
在大部分教学课堂中,会把SSH作为最核心的教学内容。 但是,我们在实际应用中发现,SpringMVC可以完全替代Struts,配合注解的方式,编程非常快捷,而且通过restful风格定义url,让地址看起来非常优雅。 另外,MyBatis也可以替换Hibernate,正因为MyBatis的半自动特点,我们程序猿可以完全掌控SQL,这会让有数据库经验的程序猿能开发出高效率的SQL语句,而且XML配置管理起来也非常方便。
一、开发环境和框架
1、操作系统:Windows,Linux,mac
2、开发工具:JDK,Tomcat,intellij idea 或者 eclipse,建议用intellij idea
3、项目管理:Maven
4、开发框架:Spring+SpringMVC+Mybatis
二、理解maven
maven是一个软件工程(Software Project)管理工具。 对于maven来说,一个软件工程的唯一标识是由开发者(groupId)、生成物(artifactId)、版本(version) 共同决定的。每个工程都有一个打包类型,可以是jar, war, ear 或 pom。打包类型决定了工程最终产物的类型。 其中pom类型用于构件多模块工程。工程之间有两种关系:依赖和聚合
1、工程依赖关系
依赖关系的管理是maven最为人称道的地方。一个工程可以依赖多个其他工程, 通过工程的唯一标识(groupId+artifactId+version)可以明确指明依赖的库及版本,而且能够处理 依赖关系的传递。 maven可以指定依赖的作用范围(scope)
2、工程聚合关系
前面提到pom类型用于于构件多模块工程,这体现了project之间的一种聚合关系: 将一系列小的模块聚合成整个产品。通过聚合后的工程可以同时管理每个相关模块的构建、清理、文档等工作。 聚合关系通过在子工程中指定一个pom类型的project作为父project来定义。
三、Spring+SpringMVC+Mybatis简介
1、Spring
太强大了,以至于我无法用一个词或一句话来概括它。但与我们平时开发接触最多的估计就是IOC容器,它可以装载bean(也就是我们java中的类,当然也包括service dao里面的),有了这个机制,我们就不用在每次使用这个类的时候为它初始化,很少看到关键字new。另外spring的aop,事务管理等等都是我们经常用到的。
3、MyBatis
如果你问我它跟鼎鼎大名的Hibernate有什么区别?我只想说,他更符合我的需求。第一,它能自由控制sql,这会让有数据库经验的人编写的代码能搞提升数据库访问的效率。第二,它可以使用xml的方式来组织管理我们的sql,因为一般程序出错很多情况下是sql出错,别人接手代码后能快速找到出错地方,甚至可以优化原来写的sql。
3、SpringMVC
它用于web层,相当于controller(等价于传统的servlet和struts的action),用来处理用户请求。举个例子,用户在地址栏输入http://网站域名/login,那么springmvc就会拦截到这个请求,并且调用controller层中相应的方法,(中间可能包含验证用户名和密码的业务逻辑,以及查询数据库操作,但这些都不是springmvc的职责),最终把结果返回给用户,并且返回相应的页面(当然也可以只返回json/xml等格式数据)。springmvc就是做前面和后面过程的活,与用户打交道!!
4、SpringMVC工作原理
第一步:用户发送请求到前端控制器(DispatcherServlet)
第二步:前端控制器请求HandlerMapping查找 Handler 【可以根据xml配置、注解进行查找】
第三步:处理器映射器HandlerMapping向前端控制器返回Handler
第四步:前端控制器请求处理器适配器去执行Handler
第五步:处理器适配器去执行Handler
第六步:处理器适配器执行完成后,Controller返回ModelAndView
第七步:处理器适配器向前端控制器返回ModelAndView
ModelAndView是springmvc框架的一个底层对象,包括Model和view
第八步:前端控制器请求视图解析器去进行视图解析【根据逻辑视图名解析成真正的视图(jsp)】
第九步:视图解析器向前端控制器返回View
第十步:前端控制器进行视图渲染【视图渲染即:模型数据(在ModelAndView对象中)填充到request域】
第十一步:前端控制器向用户响应结果
四、创建项目(略)
五、配置开发环境
第一步:导入项目所需要的库
第二步:配置dao层
1、读入数据库连接相关参数(可选)
2、配置数据连接池
配置连接属性,可以不读配置项文件直接在这里写死
配置c3p0,只配了几个常用的
3、配置SqlSessionFactory对象(mybatis)
4、扫描dao层接口,动态实现dao接口,也就是说不需要daoImpl,sql和参数都写在xml文件上
第三步:配置service层
1、扫描service包所有注解 @Service
2、配置事务管理器,把事务管理交由spring来完成
3、配置基于注解的声明式事务,可以直接在方法上@Transaction
第四步:配置web层
1、开启SpringMVC注解模式,可以使用@RequestMapping,@PathVariable,@ResponseBody等
2、对静态资源处理,如js,css,jpg等
3、配置jsp 显示ViewResolver,例如在controller中某个方法返回一个string类型的”login”,实际上会返回”/WEB-INF/login.jsp”
4、扫描web层 @Controller
五、项目目录简介
resources:存放资源文件,譬如各种的spring,mybatis,log配置文件
mapper:存放dao中每个方法对应的sql,在这里配置,无需写daoImpl
spring:这里当然是存放spring相关的配置文件,有dao service web三层
webapp:这个貌似是最熟悉的目录了,用来存放我们前端的静态资源,如jsp js css
dao:与数据打交道,可以是数据库操作,也可以是文件读写操作
model:一般与数据库的表相对应,封装dao层取出来的数据为一个对象,也就是我们常说的 一般只在dao层与service层之间传输
service:业务逻辑(接口)
serviceImpl:业务逻辑(实现),实现我们业务接口,一般事务控制是写在这里
controller:控制器springmvc就是在这里发挥作用的,一般人叫做controller控制器,相当于struts中的action