一、为什么要用MyBatis
1、一些持久化框架对比
方式 | 优点 | 缺点 | 应用场景 |
---|---|---|---|
Hibernate | 不再需要编写SQL就可以通过映射关系来操作数据库 | 当多表关联超过3个时Hibermate的级联会损失很多性能;学习成本高 | 适合性能要求不太苛刻的系统,不适合需要大量复杂查询的系统 |
SpringJDBC | 内嵌Spring框架中、支持AOP;提供了统一的异常处理,框架处理了异常;事务管理 | 只是对原生JDBC进行一层非常薄的封装,没有缓存 | 需要在代码中嵌入SQL语句,适用中小型项目 |
Mybatis | 满足灵活定制SQL和性能优化的需求 | 编写SQL和映射规则,工作量相对大些 | 性能要求高、响应快、灵活的系统;sql修改、优化比较方便 |
二、MyBatis概念梳理
1、概念
-
MyBatis是支持普通SQL查询、存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及结果集的查询。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects)映射成数据库中的记录。
-
与JDBC相比,MyBatis简化了相关代码,SQL语句在一行代码中就能执行,MyBatis提供了一个映射引擎,声明式的将SQL语句的执行结果与对象数据进行映射,通过使用一种内建的类XML表达式语言,SQL语句可以被动态生成。
下图是MyBatis功能流程的整体架构图;主要包含了接口层、核心层、基础层。
-
接口层主要指的是session
-
核心层主要指的是MyBatis的配置、SQL执行、结果映射等
-
基础层主要包含日志、缓存、连接池、事务等。
三、核心层源码分析
1、加载配置文件生成会话工厂
2 、生成会话
3、获取映射
4、执行select
四、源码地址
https://github.com/mybatis/mybatis-3
https://github.com/mybatis/parent