前两章我为大家详细介绍了如何搭建
Maven
环境、
Spring MVC
的流程结构、
Spring MVC
与
Struts2
的区别以及示例中的一些配置文件的分析。在这一章,我就对示例的层次结构进行说明,以及
MyBatis
的一些简单介绍。
本文不会对
MyBatis
作详细说明,大象还是假定阅读本文的朋友对
MyBatis(ibatis)
有最基本的了解,只有这样才能较好的理解本文的内容。关于
MyBatis
请查看它的官方文档及其它参考资料,本文不作详细讨论。
一、
工程结构图
![](https://i-blog.csdnimg.cn/blog_migrate/07126e62a4d37446a3825518b3405311.jpeg)
上面这是典型的
Maven
项目结构形式,使用本地仓库管理
jar
包的依赖,使用插件打包编译发布非常方便,让我们从传统的开发方式中解放出来,大家都快来使用
Maven
构建项目吧!
二、
映射文件
使用
MyBatis
进行持久化操作,需要设置一个映射文件,一般来说,每张表对应一个实体对象和一个
mapper
映射文件。而
MyBatis
里面没有像
Hibernate
那样复杂的关联关系,所以,它的每个实体类其实就是一个很普通的
POJO
类。而映射文件中,都是
SQL
语句,下面就是示例中
RoleMapper.xml
的代码片段。
![](https://i-blog.csdnimg.cn/blog_migrate/16873c8af93782bd243fc92756457951.jpeg)
那么,
MyBatis
是如何将数据库字段与
POJO
对象进行映射的呢?这是在它的内部,会将到得的结果或结构集,与我们定义的
POJO
对象属性进行映射,规则是,属性首字母小写,使用驼峰式命名方式,而字段则是单词与单词间,用下划线连接。比如:数据库有个
USER_NAME
字段,那么与它对应的属性就应该是
userName
。如果字段命名没有使用下划线,那么属性可以直接定义成该单词。比如,
NAME
字段,它的属性就是
name
。
三、
基于
namespace接口与公用dao的区别
从 MyBatis3.0 开始,对 mapper 中的 namespace 属性新增了一个特性:可以指定具体的接口来作为持久化操作类,在接口中定义与映射文件中 id 属性值相同的方法, MyBatis 会自动去绑定和执行对应的 SQL 语句。这种接口实现方式,需要为每个 Mapper 创建一个接口,如果系统做大了,维护这些类会比较麻烦,大象个人倾向于基础服务式的 Dao 实现类,如例子中的 MyBatisDao 。
四、 MyBatisDao
持久化操作基类, SqlSessionDaoSupport 是 mybatis-spring 插件中封装的,用于获得 SQL Session 连接,执行数据库操作,我定义了几个常用的方法。
关于
mybatis-spring
插件我简单介绍一下,
Spring 3.x
的发布并没有对
MyBatis
这一优秀的
SQL
框架提供支持,虽然在它的问题列表中已经有这样的请求,但直到目前
3.0.5
版的发布,都还没将这个问题处理掉。不过这难不倒开源世界里广大的爱好者与贡献者,
mybatis-spring
就是在这样的情况下诞生了。它是由
MyBatis
社区爱好者完成的一个开源项目,用来进行
Spring 3.0
与
MyBatis 3.0
的配置整合。该插件需要运行在
JDK 5.0
或更高版本。
![](https://i-blog.csdnimg.cn/blog_migrate/20e8f11017ddf35a1e71c5a47fc62b25.jpeg)
五、 Service
在
ssm3
这个示例中,大家有没有发现,已经没有为每个
entity
定义一个
dao
,而是统一的调用
MyBatisDao
作为存储服务接口。
另外与使用
Hibernate
的主要区别,就是不能直接传一个对象参数,还必须写上
key
值,它是
namespace
加上
ID
值。
六、 entity
MyBatis 的实体类就是一个简单的 POJO 对象,只是用来与表字段进行关联映射,请注意,我这里所说的映射不是像 Hibernate 那种绑定关系,只一种存放数据的对象而已。
七、 测试
![](https://i-blog.csdnimg.cn/blog_migrate/14683edc99065fbdea36a177d000df8d.jpeg)
六、 entity
MyBatis 的实体类就是一个简单的 POJO 对象,只是用来与表字段进行关联映射,请注意,我这里所说的映射不是像 Hibernate 那种绑定关系,只一种存放数据的对象而已。
![](https://i-blog.csdnimg.cn/blog_migrate/fe0894fcd8303995d6d5ab04c88d23fe.jpeg)
七、 测试
上面的步骤完成后,接下来就需要测试下我们的业务接口是否正常,编写一个测试类,为了达到目的,简便起见,大象是对
RoleService
进行测试,
UserService
同理类似。
在写测试用例前,需要在
POM
文件中加入一个
Srping
测试依赖,这是大象在前面两章疏忽漏掉了,请大家谅解。
然后编写测试类,运行测试,通过!
![](https://i-blog.csdnimg.cn/blog_migrate/b6e860f68a5aebea6fac9699210215b8.jpeg)
然后编写测试类,运行测试,通过!
![](https://i-blog.csdnimg.cn/blog_migrate/c2634f5ca63e1fbf1ebaa1dc1957fb5f.jpeg)
到此,这一章的内容就讲完了,如果有对注解不理解的地方,请看下我之前的SSH2系列之三,至于MyBatis,它的内容太多了,如果不清楚还请先看下使用指南。
下一章我将会介绍web层,以及使用
Spring MVC
的注解来实现控制器功能。
本文为菠萝大象原创,如要转载请注明出处。菠萝大象