前言
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
为什么要选择mybatis呢?原因如下:
1.简单,这个无需我多废话。肯定的啊,使用过的童鞋都知道,在dao层定义一个接口,然后定义一个对应的xml(xml中namespace的值对应接口的全限定名就ok。因为mybatis是通过namespaceid去和接口类进行映射,然后使用动态代理创建接口类的实例方法,参见动态代理).
2.结果集映射,我认为这是mybatis做的最牛的一点,也是选择他最大的一个理由
3.完善的缓存机制(mybatis有1级缓存和2级缓存),1级缓存是基于会话的(Session),2级缓存是基于应用级别。这里不做过多阐述,有兴趣的可以参考文章
4.强大的插件机制。它可以在运行过程中动态的执行你自己的业务逻辑,比如防止sql注入,分页,sql日志打印,sql执行耗时等都可以在插件中做。真正实现了业务与功能分离。让你随行所欲的在飞dao层中增加任何你想做的事情。
阅读源码后的感受
通过阅读源码,我发现许多优秀的开源项目历经数千名开发者的数万次提交,被数亿用户使用。这些项目从可扩展性、可靠性和可用性等各个角度考量,都是十分优良的。通过阅读这些项目的源码,我能找到自己在软件设计和开发上的不足。
在本篇当中我努力做到详尽而不哕唆。本篇以包为单位,对MyBatis源码中的 300多个类进行了介绍。在此过程中,对于简单或重复的类一笔带过, 但对于复杂的类,则是逐方法、逐行地进行分析,力求让大家读得顺、读得懂、有收获。
这份MyBatis源码总共分为9个章节,共计272页源码笔记,由于内容过多,小编没办法为大家进行详尽的展示,只能为大家展示部分内容
一MyBatis简介
本章主要介绍了Java ORM的来源和历史,同时分别介绍了JDBC、Hibernate和MyBatis三种访问数据库的方法,在分析它们优缺点的基础上,比较它们之间的区别和适用的场景。
二MyBaits入D
这章的目标很明确,就是带大家入门。我们先准备环境的搭建,然后开始讲述MyBatis的基本构成和应用,并且给出一个可以运行的实例。为了让大家加深理解,我们将讲述MyBatis的核心类和接口对象的生命周期,在理解其生命周期后,我们将优化实例。这章内容应用多于原理,我们在后面的几章中再讨论其实现的原理、架构和方法。
三配置
第2章我们只是粗浅地讨论了MyBatis的组成和它们大致的用法,这章的任务是详细讨论MyBatis的配置。MyBatis的配置文件对整个MyBatis体系产生深远的影响,所以我们需要认真学习它。先来看一下MyBatis配置XML文件的层次结构。注意,这些层次是不能够颠倒顺序的,如果颠倒顺序,MyBatis 在解析XML文件的时候就会出现异常。先来了解一下MyBatis配置XML文件的层次结构。
四映射器
映射器是MyBatis 最强大的工具,也是我们使用MyBatis时用得最多的工具,因此熟练掌握它十分必要。MyBatis 是针对映射器构造的SQL构建的轻量级框架,并且通过配置生成对应的JavaBean返回给调用者,而这些配置主要便是映射器,在MyBatis中你可以根据情况定义动态SQL来满足不同场景的需要,它比其他框架灵活得多。MyBatis 还支持自动绑定JavaBean, 我们只要让SQL返回的字段名和JavaBean的属性名保持-致(或者采用驼峰式命名),便可以省掉这些繁琐的映射配置。
五动态SQL
如果使用JDBC或者其他框架,很多时候你得根据需要去拼装SQL,这是一个麻烦的事情。而MyBatis提供对SQL语句动态的组装能力,而且它只有几个基本的元素,十分简单明了,大量的判断都可以在MyBatis的映射XML文件里面配置,以达到许多我们需要大量代码才能实现的功能,大大减少了我们编写代码的工作量,这体现了MyBatis的灵活性、高度可配置性和可维护性。MyBatis 也可以在注解中配置SQL,但是由于注解中配置功能受限,对于复杂的SQL而言可读性很差,所以使用较少,因此在本书将不对它们进行介绍。
六MyBatis的解析和运行原理
如果你只限于MyBatis 的普通使用,不打算使用插件,那么请你跳过本章。因为在前5章我们对MyBatis的应用已经有了较为详细的阐述,翻阅前面的内容,熟悉它们,你就可以成为一名能够正确使用MyBatis 的开发者。本章是有-定难度的,因为它讲述的是MyBatis底层的设计和实现原理,原理就意味着晦涩难懂,对Java初学者来说,这甚至难以理解,本章更加适合对Java 有一-定经验 且参与过设计的开发者阅读,不过初学者通过仔细阅读和反复推敲还是能够掌握的。
七插件
第6章讨论了四大对象的运行过程,在Configuration对象的创建方法里我们看到了MyBatis用责任链去封装它们。换句话说,我们有机会在四大对象调度的时候插入我们的代码去执行一些特殊的要求以满足特殊的场景需求,这便是MyBatis的插件技术。
八MyBatis-Spring
本书主要讲解的是MyBatis,所以对Spring 的一些技术,例如,I0C (反转控制)和AOP (面向切面编程),只是点到一些基础和书中需要使用的部分。
九实用的场最
本章主要介绍一些实用的场景,让大家了解在实际工作中应该如何使用MyBatis。 这些场景包括数据库的BLOB字段的读写、批量更新、调度存储过程、分页、使用参数作为列名、分表等内容。这些场景在大量的编码中使用,具备较强的实用价值,这些内容都是笔者通过实战得来的,供读者们参考。
总结
源码阅读是一项过程艰苦而结果可观的工作。每一个潜心阅读源码的开发者都值得尊敬,也希望这份MyBatis源码笔记能够在您阅读源码的过程中为您提供一些帮助,让您多一些收获。