本文已参与「新人创作礼」活动,一起开启掘金创作之路。
自从初学SSM框架感觉一团糟,希望这篇文章能帮到你!(Spring)这篇文章一度突破5个达不溜阅读后,有读者评论及私信说让我写写Mybatis框架的入门文章,这是这篇文章的由来。
本文章的主要目的还是帮助初学者对这个持久层框架有一个清晰的认识,为初学者学习Mybatis打下基础,不至于只见树木不见森林。文章以JDBC到Mybatis的演化为主线,带小伙伴体会编码式开发与配置式开发的区别,并不会去讨论一些关于mybatis的一些难点,重点。希望小伙伴们看完后,能知道自己在学什么!
什么是Mybatis?
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作(记住这句话,边看边体会) 。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO为数据库中的记录。
课外小知识:MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。\
概念中有几个名词给大家解释一下,持久化是将程序数据在持久状态和瞬时状态间转换的机制。通俗的讲,就是瞬时数据(比如内存中的数据,是不能永久保存的)持久化为持久数据(比如持久化至数据库中,能够长久保存)。其实早些年没有数据库的时候,数据都以文件形式存在电脑上。经过发展Mybatis是将数据持久化到数据库中。
JDBC操作数据库 VS Mybatis操作数据库
简单带大家回顾一下JDBC操作数据库的大概流程:
- 加载驱动类
- 获取一个Connection连接对象
- 获取一个Statement对象
- 操作数据库,获得结果集
这里我写了一个小demo,带大家寻找自己的青葱岁月,需求很简单,查询以下数据库中的数据:
接下来我们按上述流程来实现上述需求:(这一块没有必要盯着代码一行一行看,能回忆起JDBC操作数据库的流程即可),整个流程像这样:
然后是使用Mybatis来实现上述需求,大概流程是:
- 读取配置文件
- 获取SQLSessionFactory工厂
- 获取SQLSession对象
- 操作数据库
具体代码如下:
通过对比我们很直观的能看出来使用Mybatis操作数据库的代码少了很多,大家可以想想上述接口中有十个操作数据库的方法,那减少的代码量是很可观的。当然上一句话不是本文的重点,重点是Mybatis与JDBC的对比,
这个时候不知道大家是否能理解Mybatis图中的 '实现类' ,我们都知道操作数据库都要sql语句,单纯调用接口中的selectAll()方法是无法查询数据库的,所以这里的
<select id="selectAll" resultType="pojo.User">
select * from User
</select>
就相当于JDBC中的UserDaoImpl。
科普小知识:以Mapper作为后缀是Mybatis中的一种规范,如果把JDBC图中的UserDao命名成UserMapper,对Mybatis图中的‘实现类’是否会更好理解一点?\
总结一下
MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作,这句话不知道现在大家是否能理解,通过对比图,可以清楚的看到Mybatis免除了获取结果集的工作,并且不用手动关闭各种资源。如果你足够细心,那么你会发现设置参数的代码没有体现出来,因为这里的sql不需要参数。(其实是因为截图截不下了哈哈哈)如果想看看JDBC设置参数的代码可以看看我的这篇文章:
Evader1997:JDBC连接池(上)10 赞同 · 5 评论文章
重新说一下本文的目的,目的就是让初学者知道JDBC的短处与Mybatis是如何改进的,所以大家要以一个全局的眼光来看,看懂Mybatis大概是什么,它跟传统JDBC差在哪里,而不是会写文章中的代码,最终建立自己对Mybatis的认识,为后续学习Mybatis做个铺垫。
后面还会出一篇关于Mybatis与Mybatis-Spring(Mybatis整合Spring)的文章,还是以对比的形式出现,毕竟现在Mybatis都是整合Spring使用,并没有单独使用。