本书以MyBatis 3.4为基础,针对MyBatis的架构设计和实现细节进行了详细分析,其中穿插介绍了MyBatis源码中涉及的基础知识、设计模式以及笔者自己在实践中的思考。本书共4章,从MyBatis快速入门开始,逐步分析了MyBatis的整体架构以及核心概念,对MyBatis的基础支持层、核心处理层中各个模块的功能和实现细节进行了深入的剖析。除此之外,还分析了MyBatis插件的应用场景和实现原理,介绍了MyBatis与Spring集成开发的示例和原理,以及一些实践中的小技巧和小工具的使用方法。
本书旨在为读者理解MyBatis的设计原理、阅读MyBatis源码、扩展MyBatis功能提供帮助和指导,让读者更加深入地了解MyBatis的运行原理、设计理念。希望本书能够帮助读者全面提升自身的技术能力,让读者在设计业务系统时,可以参考MyBatis的优秀设计,更好地应用MyBatis。
以MyBatis 3.4源码为基础,详细分析MyBatis的架构设计和实现细节
深入剖析MyBatis的基础层、核心层中各个模块的功能和实现细节
介绍以插件方式扩展MyBatis的原理以及与Spring集成的原理
徐郡明,武汉大学硕士,目前就职于航天科技集团旗下某研究所,主要负责政企云平台基础架构的设计和研发工作,关注多项Java开源技术的发展。
前 言
面向对象程序设计是企业级开发常用的设计方式,在实践中常用的编程语言大多都是面向对象的编程语言。而在实际生产环境中常用的数据库产品,如MySQL、Oracle等,都是关系型数据库。虽然NoSQL数据库在最近一段时间有飞速的发展,但是关系型数据库凭借多年的发展和技术积累,依然占据着市场的主导地位。
MyBatis作为一个优秀的Java持久化框架,可以帮助程序员完成ORM映射、查询缓存等常用功能。MyBatis以其高性能、易优化、易维护、可扩展等优点,受到越来越多的开发人员的青睐,也有越来越多的设计人员开始将MyBatis作为其首选的Java持久化框架。
MyBatis 的前身是Apache的一个开源项目—iBatis,2010年iBatis项目由Apache基金会迁移到了Google Code,并正式更名为MyBatis。2013年11月,MyBatis迁移到Github。目前,越来越多的互联网公司开始使用MyBatis,其中包括网易、搜狗、华为等,依赖MyBatis搭建的创业项目更是数不胜数。
MyBatis的亮点有很多,比如灵活的动态SQL语句、强大的ORM映射功能等,同时还提供了二级缓存等常用功能。MyBatis同时支持XML和注解两种配置方式,帮助程序员屏蔽了近乎所有的JDBC代码、参数设置、结果集处理等工作,极大地提升了开发效率。
MyBatis中有很多令人称赞的功能和优秀的设计,但至今还没有一本书籍深入剖析MyBatis的内部设计和实现细节,希望本书的出现可以填补此项空白。
本书以MyBatis 3.4为基础,针对MyBatis的架构设计和实现细节进行了详细分析,其中穿插介绍了MyBatis源码中涉及的基础知识、设计模式以及笔者自己在实践中的思考。除此之外,还分析了MyBatis插件的应用场景和实现原理,介绍了MyBatis与Spring集成开发的示例和原理,以及一些实践中的小技巧和小工具的使用。
如何阅读本书
由于篇幅限制,本书并没有详细介绍Java的基础知识,但为了便于读者理解MyBatis的设计思想和实现细节,笔者介绍了一些必需且重要的基础内容,例如涉及的多种设计模式。
本书共4章,它们互相之间的联系并不是很强,读者可以从头开始阅读,也可以选择自己感兴趣的章节进行学习。
第1章是MyBatis的快速入门,其中介绍了MyBatis出现的背景、与其他Java持久化框架的比较以及MyBatis的入门示例。之后介绍了MyBatis的整体架构,并简述了MyBatis中各个模块的基本功能。
第2章介绍MyBatis基础支持层中各个模块的功能,其中包括数据源模块、事务管理模块、缓存模块、binding模块、反射模块、类型转换模块、日志模块、资源加载模块和解析器模块。这些模块相对独立,读者在实践中如果遇到类似的需求,可以直接参考MyBatis的实现。
第3章介绍MyBatis核心处理层的主要功能,其中包括MyBatis初始化过程、动态SQL的解析过程、结果集的映射原理、SQL语句的参数绑定、KeyGenerator、StatementHandler以及Executor等组件的实现原理。同时,还介绍了MyBatis接口层的设计原理。
第4章介绍MyBatis插件的编写和配置方式、运行原理以及常见的应用场景,并分析了笔者在实践中使用的分页插件和分表插件的具体实现。之后,介绍了MyBatis与Spring集成开发的相关内容,搭建了Spring 4.3、MyBatis 3.4、Spring MVC的集成开发环境,剖析了MyBatis-Spring中核心组件的实现原理。最后介绍了一些在使用MyBatis时用到的小技巧和一些小工具的使用方法。
在本书中,除了介绍MyBatis的实现细节,还介绍了其中涉及的设计模式,可以帮助读者了解MyBatis源码背后的设计思想。
如果读者在阅读本书的过程中,发现任何不妥之处,请将您宝贵的意见和建议发送到邮箱xxxlxy2008@163.com,也欢迎读者朋友通过此邮箱与笔者进行交流。
致谢
感谢电子工业出版社博文视点的陈晓猛老师,是您的辛勤工作让本书的出版成为可能。同时还要感谢许多我不知道名字的幕后工作人员为本书付出的努力。
感谢朱碧颖、逄志强、杨俊灵、李全才、曾君实等朋友在百忙之中抽出时间对本书进行审阅和推荐。感谢米秀明、曾天宁、葛彬、杨杉、文静宇、刘浩、杨鹏林、路恒、藤少广等同事,帮助我解决工作中的困难。
这里特别感谢王鲁老师,在软件架构、设计模式等方面对我的指导。
感谢冯玉玉、李成伟,是你们让写作的过程变得妙趣横生,是你们让我更加积极、自信,也是你们的鼓励让我完成了本书的写作。
最后,特别感谢我的母亲大人,谢谢您默默为我做出的牺牲和付出,您是我永远的女神。
徐郡明
“这是一种低层 API” , 低层 —> 底层
对于代码注释的部分:mybatis-config.xml 中”propteries标签….”应该改为”properties标签”.
左边是javaType—>jdbcType是对的,右边的javaType—>jdbcType应该调过来改为jdbcType—>javaType
第四五行的描述有误,;两句话的jdbcType和java都要对调,基本上两句话描述反了(逻辑很乱呀,相对来说66页描述是对的,到了67页描述就错了,不知道何故?)
这两句话描述反了相应的,67页的注释也是反的.