设为首页 加入收藏

TOP

Spring MVC整合Mybatis 入门(一)
2017-08-19 10:24:40 】 浏览:9010
Tags:Spring MVC 整合 Mybatis 入门

打开Intellij,File-->new Project--->选中,Maven--->勾上"Create from archetype"--->选择 Maven web project。如下图:



一步步Next,等待工程Build成功,如果右下角有提示“Maven project need to be imported“则点击: import change...”


完了之后,整个项目Build Success,会生成如下初始目录:



在src.main下新建一个文件夹 java, 作为源代码目录。CTRL+ALT+SHIFT+S 打开“project structure配置窗口”,将 java 目录关联成 source目录。



在 java 目录下创建四个子目录 controller、mapper、pojo、service


controller,控制器类。DispatcherServlet将拦截到的HTTP请求交给对应的Controller来处理,Controller调用 Service 完成相应的请求任务。


service,业务逻辑实现类。Service 一般都需要DAO类(或者说Mapper类)操作数据库,然后完成相应的业务逻辑处理。


mapper,数据库操作类。定义了一些如何操作数据库的方法。


pojo,实体类。对应数据库中的表,一般pojo类中的每个属性对应数据库中的一个字段。


此外,还有配置文件目录。在 src/main/resources目录下,新建mapper文件夹,与 src/main/java/mapper 对应:一个RoleMapper.java 对应着一个 RoleMapper.xml配置文件,再加上相应的Spring配置就可以实现数据库的操作。在 src/main/resources目录下,新建spring文件夹,里面有三个配置文件:spring-web.xml是web相关配置;spring-dao.xml是数据库相关的配置;spring-service.xml是Service类相关的配置。当然也可以将所有的配置放在一个文件里,比如常见的applicationContext.xml,分开配置的话,可能看起来更清晰。大致目录结构如下:



对应的RoleMapper.xml配置如下:


再来看业务逻辑,很简单:用户从浏览器中发一个查询请求 Role,请求的参数为 id,Service根据 id 去数据库找 Role 记录,返回给用户 id 对应的Role。


RoleService.java代码如下:


具体的实现类如下:


第12行,@Service 以Spring注解的方式将RoleServiceImpl定义成Bean,在spring-service.xml中配置:component-scan,让Spring去扫描 service包下带有注解的类,告诉Spring容器 RoleService(Impl)类 是一个Bean对象。在其它类中就可以用 @Autowired 将RoleService注入。


完整spring-sevice.xml配置文件:


 


RoleController.java代码如下:


14行,@Controller 以Spring注解的方式将 RoleController类定义为Spring容器可管理的Bean。


19行,在web.xml中配置了 servlet-mapping,当浏览器请求的URL带有"role/getRole"时,就会拦截请求将给 RoleController来处理。


20行,@ResponseBody定义了 处理之后的返回值,将 Role 对象以 JSON格式封装起来,返回给浏览器。@RequestParam("id"),定义请求参数。


比如在浏览器中输入:http://localhost:8000/mvc/role/getRole?id=5



数据库中记录如下:



 


这一切到底是如何得到的呢?


①RoleController需要一个RoleService对象,然后在第23行调用 getRole方法,返回一个Role对象。首先第16-17行,使用 @Autowired将 RoleService注入到RoleController中,这样RoleController不需要显示地new RoleService对象,对应的创建过程由Spring容器自动完成----对象的创建 与 “对象的使用” 解耦。“对象的使用其实就是业务逻辑,让开发者不需要关注对象的创建了”


②为什么Spring容器知道 将 RoleService 作为一个Bean注入到 RoleController中去呢?


因为,RoleService类使用 了@Service 注解,并且在spring-service.xml中配置 了<component-scan....> 见上面RoleService源代码部分。


③为什么 roleSevice.getRole(id)就能从数据库中查找相应的记录并返回呢?前面的RoleMapper.java 和 RoleMapper.xml配置文件已经定义好了操作数据库的语句:


 


然后我们又在spring-dao.xml中配置了访问数据库:详细具体解释如下:


告诉Spring容器扫描mapper目录下的 带注解的类,这样RoleService就可以自动注入 RoleMapper对象了,有了RoleMapper对象,通过Mybatis框架,就可以访问数据库了。而Spring与Mybatis的整合依赖包,就需要在pom.xml中给出:


 


配置数据库连接信息:访问哪个数据库?数据库地址在哪?访问数据库的端口是什么?用户名和密码是什么?这些信息都在jdbc.properties文件中定义好了,<context:property-placeholder>告诉Spring容器去哪里读取jdbc.properties配置文件。jdbc.properties文件如下:


 


知道了数据库在哪里了,以何种方式连接数据库呢?一般会配置各种连接池


连接池的依赖包,又在哪里呢?因为我们使用的是Maven POM管理依赖,在pom.xml文件中就需要配置:


 


配置好了访问数据库的环境,还需要访问数据库的具体实例,这就是SqlSession。于是继续在spring-dao.xml添加配置:


 


接下来再把SqlSession 告诉RoleMapper对象,让它拿着SqlSession去操作数据库。


因此,这也是为什么 我们只需要通过Spring将RoleMapper能够访问数据库的原因。而当 Service需要访问数据库时,只需要将RoleMapper注入进来,就可以执行getRole方法查询数据库了。


完整的spring-dao.xml配置文件:


 


前面介绍的都是Spring应用上下文,而这里的 HTTP请求牵涉到 web应用上下文,二者是如何结合的呢?在web.xml中进行配置:


通过contextConfigLocation将 spring上下文中的配置文件加载进来,实现二者的结合。


发起请求--->请求拦截--->返回请求 是如何实现的呢?在web.xml中配置了servlet-mapping,其中的<servlet

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇sendredirect()和forward()的区别 下一篇使用NumPy、Numba和Python异步编..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目