最近在中软学习ssm框架的知识在这里总结一下!
以前开发BS架构的web项目时,像笔者这种菜鸟就是用html,js,css,ajax写前台,servlet作为后台接收请求,再用jdbc操作数据库。用这样的方式实现
1.前台发送请求------>2.后台servlet接收请求------->3.在servlet里获取请求的参数------>4.通过参数我们进行相应的数据库操作------->5.将处理好的数据再通过servlet响应给前台
就这样我们就实现了请求响应的一个流程。
这种方式简单但效率低,对于每一个操作我们都需要些个servlet去接收和响应。对于每一个对象我们都需要些很多重复的增删改查的方法。正因为有这样的缺陷大佬们才发明了框架。然而你不管你外面包装了多少层我们的底层的实现还是用上述的方式,只不过包装后更简单了。
1.先讲讲servlet和springmvc:
SSM(Spring+SpringMVC+MyBatis)其中一个S指的就是springmvc。在springmvc里他有一个核心的servlet用于接收所有的请求org.springframework.web.servlet.DispatcherServlet。而用servlet我们每一个请求都要写一个servlet。
在DispatcherServlet里面我们获取请求的
URI(URI一般由三部分组成:一、主机名。二、标志符三、相对URI
下面是一个图像的相对URI:
<IMG src="../icons/logo.gif" alt="logo">
而在程序里获取的就是类似于 项目名/目录/../savedept.do
)
我们通过uri来判断我们请求的信息然后具体的操作我们调用不同的
控制器controller(
@RequestMapping(value="/savedept.do")
@ResponseBody
public String savedata(){
//调用服务中的方法
departmentService.Savedata();
System.out.println("11111");
return "ok";
}
)
然后将处理好的结果通过DispatcherServlet响应回去或者响应相应的视图(前台网页)。
2.讲讲JDBC和mybatis
用JDBC的话我们一般是这几步:
1.根据我们的数据库信息创建一个连接对象;
2.写增删改查操作函数,在这里会有preparedStatement,statement这两种;
3.就是在响应的servlet里调用;
用mybatis这是如下步骤:
1.对于我们数据库中每一个表我们会有一个响应的javabean类;
2.对于没有个javabean我们会写一个对应的接口;
3.对于每一个接口我们相应的会配置一个mapper配置文件,用于标注我们接口方法具体的数据库操作
4.具体实现我们的接口方法
(
SqlSessionFactoryBuilder通过mybatis-config.xml创建sqlSessionFactory;
再通过sqlSessionFactory.openSession()获取sqlsesion;
sqlsesion获取mapper.xml配置信息创建接口;
调用接口方法;
关闭sqlsession
);
3.通过new实例化对象和spring控制反转
Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。如何理解好Ioc呢?理解好Ioc的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”,那我们来深入分析一下:
●谁控制谁,控制什么:传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对象的创建;谁控制谁?当然是IoC 容器控制了对象;控制什么?那就是主要控制了外部资源获取(不只是对象包括比如文件等)。
●为何是反转,哪些方面反转了:有反转就有正转,传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象;为何是反转?因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转;哪些方面反转了?依赖对象的获取被反转了。
用图例说明一下,传统程序设计如图2-1,都是主动去创建相关对象然后再组合起来:
图2-1 传统应用程序示意图
当有了IoC/DI的容器后,在客户端类中不再主动去创建这些对象了,如图2-2所示:
图2-2有IoC/DI容器后程序结构示意图
本文参考了http://jinnianshilongnian.iteye.com/blog/1413846