MyBatis 技术内幕 - MyBatis 介绍
读书笔记
- 书籍名称:《MyBatis 技术内幕》
- 编著姓名:徐郡明
- 出版厂商:电子工业出版社
- 源码版本:3.4.0+
MyBatis
-
背景简介:
- 前身:iBatis ,Apache 开源项目
- 更名:MyBatis ,2010 年迁移到 Google Code
- 现在:2013年11月迁移到github
-
框架体系:持久层框架,DAO (全名:Data Access Data 数据访问对象)层框架
- 常用框架
- JDBC
- Hibernate
- MyBatis
- JPA (全名:Java Persistence API):EJB(全名:Enterprise JavaBean)持久化规范
- Spring JDBC
- 常用框架
-
产生背景
- JDBC(全名:Java DataBase Connection)
-
产生原因:Java 与 DataBase 之间连接的问题
-
提供接口:
- 面向Java应用程序的API (全名:Application Programming Interface)
- 面向DataBase驱动的API
-
执行流程:
-
框架缺点
- 硬编码:程序代码中存在大量不可重复使用的业务逻辑
- 高耦合:数据操作SQL与业务逻辑高度耦合在一起
- 复用性:复用性极低,维护成本很高
- 连接池:没有数据连接池,每一次数据请求都要重新发起一次数据库连接
- 返回值:需要逐一从返回结果中取值
-
- ORM(全名:Object Relation Mapping 对象关系映射)框架产生
- 产生背景:实现Java中bean对象与DabaBase中表中数据自动映射
- 主流框架:
- Hibernate
- MyBatis
- Hibernate
- 框架优势:
- 完全映射:实现 bean 对象与 Db 中 record 的完全映射
- 方便开发:开发过程中对于数据处理完全黑盒操作,不需要关注
- 独立语言:不同于SQL(全名:Select Query Language)语言,使用HQL(全名:Hibernate Query Language)语言
- 框架劣势:
- 不灵活性:由于Hibernate实现的是完全映射,导致每一次都是返回表中全部的字段,即使只需要一个字段,也需要全表查询
- 索引使用:由于Hibernate完全屏蔽了数据操作的处理,导致SQL查询语句无法准备的使用到索引,无法对SQL语句进行优化
- 独立语言:由于Hibernate使用HQL语言,不同于SQL,额外增加学习成本
- 框架优势:
- MyBatis
- 框架优势
- 支持缓存:提供一级、二级缓存使用
- 动态SQL:根据业务需求编写SQL,返回字段数量任意
- 索引优化:MyBatis 底层应用SQL语言,可以根据需要添加索引
- 配置方便:根据业务需求添加字段映射,支持多表级联
- 框架劣势
- 半自动化:MyBatis 不是完全映射的框架,需要手动维护Java Bean 与 映射关系文件
- 框架优势
- JDBC(全名:Java DataBase Connection)
-
组成部分
- PO (全名:Persistence Object):持久化对象,即 Java Bean
- mapper.java :DAO层对外提供的API接口定义
- mapper.xml:DAO层对外提供的API接口的SQL实现
-
执行流程