源码分析版本为3.4.6
为什么使用mybatis
框架 | 优点 | 缺点 |
---|---|---|
jdbc | 简单、纯粹 | 1、需要手动关闭链接 2、结果集不能自动映谢 3、安全问题都要自己实现 |
jdbcTemplate | 简单、纯粹、自动会话管理、结果集映谢 | 手动拼装SQL管理混乱 |
hibernate | 编程效率高,无需编写sql。数据库更换成本低、较完善的二级缓存、自动防SQL注入 | 完全掌握的门槛高、性能优化较麻烦、复杂映谢 |
mybatis | 学习成本低、可以进行更为细致的SQL优化,减少查询字段、统一的SQL管理、性能较高 | 功能相对简陋、需要手动编写维护SQL、表结构变更之后需要手动维护SQL与映谢、需较强的SQL编写能力 |
比较这几个框架之后,可以看出mybatis的优点还是很多的,如果你的系统需要性能比较高,开发成本低的话,那么可以选择mybatis。
获取源码
代码地址:
https://github.com/mybatis/mybatis-3.git
建议fork到自己的github上,方便提交一些学习记录。
然后通过git命令或者idea下载下来。那么接下来你就可以开启mybatis的源码之旅了。
环境搭建
之前搭了一个springboot+mybatis项目:
springboot+mybatis
项目整体一览
mybatis架构分层
主要分三层,其中包括:接口层、核心处理层、基础层。
核心类
SqlSessionFactoryBuilder:用来构建SqlSessionFactory,创建完之后,最好把它释放掉。它的最佳作用域是方法作用域(即局部方法变量)。
SqlSessionFactory:它是SqlSession的工厂类。创建完之后就不要被销毁了。只要创建一个就好了,如果项目中创建了多个,那肯定是不合理的。它的最佳作用域是应用作用域,可以使用单例模式或者静态单例模式来创建。
SqlSession:包含了面向数据库执行 SQL 命令所需的所有方法,可以执行已经映射了的sql语句。每个线程都应该有它自己的 SqlSession 实例。它不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。通俗的说,每次收到的 HTTP 请求,就可以打开一个 SqlSession,返回一个响应,就关闭它。应该把这个关闭放到finally里。
SQL Mapper:映射器是一个你创建来绑定你映射的语句的接口。它的作用域与SqlSession相同。
mybatis执行流程
mybatis学习指南
本文为博主原创文章,未经博主允许不得转载。
更多内容请访问:IT源点
注意:本文归作者所有,未经作者允许,不得转载