Java程序员以前连接数据库是这样的

现在连接数据库是这样的

在传统的JDBC 实现中,我们需要把查询过程写在Java 类中,这样非常不便于后期维护。而使用Mybatis 则可以将查询语句配置在配置文件中,只需要维护好映射关系即可。

Mybatis是一个开源的轻量级半自动化ORM框架,使得面向对象应用程序与关系数据库的映射变得更加容易。熟悉Mybatis的都知道,其源码里涉及到非常多的设计模式,比如

设计模式

Builder模式:例如SqlSessionFactoryBuilder、XMLConfigBuilder、XMLMapperBuilder、XMLStatementBuilder、CacheBuilder;

工厂模式:例如SqlSessionFactory、ObjectFactory、MapperProxyFactory;

单例模式:例如ErrorContext和LogFactory;

代理模式:Mybatis实现的核心,比如MapperProxy、ConnectionLogger,用的jdk的动态代理;还有executor.loader包使用了cglib或者javassist达到延迟加载的效果;

组合模式:例如SqlNode和各个子类ChooseSqlNode等;

模板方法模式:例如BaseExecutor和SimpleExecutor,还有BaseTypeHandler和所有的子类例如IntegerTypeHandler;

适配器模式:例如Log的Mybatis接口和它对jdbc、log4j等各种日志框架的适配实现;

装饰者模式:例如Cache包中的cache.decorators子包中等各个装饰者的实现;

迭代器模式:例如迭代器模式PropertyTokenizer;

如果之前只会使用或者没有看过Mybatis源码,那看到上面这些设计模式可能会有点懵逼。Mybatis用了这么多年了,只会用它来CRUD数据库吗?其底层的架构设计与源码分析,如何连接数据库的?如何执行的?一二级缓存的作用?sql如何解析的?源码中设计到的设计模式......这些技术点都会吗?

也许你曾经也尝试去看过,只是很难坚持下来,没有找到看源码的技巧。最近我看了一期透彻解析Mybatis底层源码分析的课程,从设计模式、缓存原理、源码分析等方面展开讲,而且购课只需0.02元,扫码即可购课:

学习Mybatis源码建议

原则

1.定焦原则:抓主线(抓住一个核心流程去分析,不要漫无目的的去看源代码)

2.宏观原则:站在上帝视角,先脉络后枝叶(切忌试图搞清楚每一行代码)

方法

1. 先会使用,了解框架的设计思想和功能架构

2. 抓主线,多尝试静态看代码

3. 在源码中写注释&画流程图

4. 整合总结

技巧

1. 断点(观察调用栈,利用条件断点,表达式)

2. 反调(Find Usages)

3. 根据接口方法找到具体实现AopProxyFactory

4. 猜测类名方法名(比如doGetBean,doCreateBean)

5. 看控制台日志

Mybatis应该是国内用得最多的「数据访问层」框架了,看了我司的好几个系统,基本都是用Mybatis。所以深入了解Mybatis的重要性不言而喻,扫码即可0.02元购课,获取源码分析课程:

☟戳阅读原文也可购课~

阿里的御用框架,它非常牛啤!不服不行!相关推荐

  1. 阿里分布式事务框架GTS开源了!

    点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! 就在昨天,阿里分布式事务框架GTS开源了一个免费社区版Fescar,看到了这个消息内心非常的激动. ...

  2. 算法竞赛入门经典(第二版) | 例题4-4 信息解码 (紫皮书牛啤!)(UVa213,Message Decoding)

    大意: 二进制编码中取前三位,得到编码长度为n(0<=n<=7), 按此长度重复截取编码中剩余部分(n位一截),直到读取n个1结束.再次取三位,长度为n,重复上述操作-直至n个1后接000 ...

  3. 阿里深度学习框架开源了!无缝对接TensorFlow、PyTorch

    阿里巴巴内部透露将开源内部深度学习框架 X-DeepLearning的计划,这是业界首个面向广告.推荐.搜索等高维稀疏数据场景的深度学习开源框架,可以与TensorFlow.PyTorch 和 MXN ...

  4. 分布式事务框架_阿里分布式事务框架GTS开源啦!

    点击上方"Java后端技术",选择"置顶或者星标" 每天带你看高清大图哦! 整理:开源中国 就在9号这天,阿里分布式事务框架GTS开源了一个免费社区版Fesca ...

  5. 阿里分布式事务框架Seata原理解析

    阿里分布式事务框架Seata原理解析 作者:伊凡的一天 链接:https://www.jianshu.com/p/044e95223a17 Seata框架是一个业务层的XA(两阶段提交)解决方案.在理 ...

  6. 【每日新闻】华米科技收购Zepp与PEI核心资产;西藏宁算科技与阿里云签署框架合作协议...

    点击关注中国软件网 最新鲜的企业级干货聚集地 趋势洞察 2018中国软件生态大会 厦门站就要与您见面啦! 点击文末[阅读原文]了解更多喔 趋势洞察 徐工信息张启亮:工业互联网平台呈现五大态势 江苏徐工 ...

  7. 问道阿里哨兵Sentinel框架_仪表盘_限流_v0.0.2

    文件名称 版本号 作者 qq 版本 问道阿里哨兵Sentinel框架_仪表盘_限流 v0.0.2 若布与宫合 8416837 SpringBoot 2.2.2 Spring-cloud-starter ...

  8. 老板现在喊我大哥,原因是我用阿里分布式事务框架Seata解决了长久以来困扰公司的分布式事务问题

    大家好,我是曹尼玛 从大学毕业5年,一直努力学习,努力工作,追求新技术,不保守. 上个月我来到一家新公司上班,月薪20K,这家公司老板人很好,对员工很关爱,公司氛围不错,同事们也努力把公司项目搞搞好. ...

  9. 阿里分布式事务框架Seata集成详情

    大家好,我是曹尼玛 从大学毕业5年,一直努力学习,努力工作,追求新技术,不保守. 上个月我来到一家新公司上班,月薪20K,这家公司老板人很好,对员工很关爱,公司氛围不错,同事们也努力把公司项目搞搞好. ...

最新文章

  1. python数组转换为列表_python - 将一系列数组转换为单个列表 - SO中文参考 - www.soinside.com...
  2. 回炉重造-基础规则之类和对象
  3. Servlet3.0下配置Servlet
  4. day30 并发编程
  5. redis深度历险:核心原理与应用实践_玩转Redis,阿里技术带你从核心原理到应用实践,一份文档全掌握...
  6. 微软职位内部推荐-Software Engineer II_VS
  7. 【动态规划】P1057 传球游戏
  8. Day11名称空间,作用域,闭包函数
  9. plotplayer s/w hevc(h265)解码 问题
  10. c++字符串逆序输出
  11. 一个简单的跑酷引擎-------bibibibi
  12. 自动化运维工具——ansile详解
  13. 【Java爬虫】爬取南通大学教务处成绩
  14. 中式红木装修——打造适合审美的居住空间
  15. maven自定义插件-mojo标注和参数
  16. 碧蓝航线内部表情包(有爱自取)
  17. 华为S5系列交换机配置
  18. [开源项目] 1. EMS
  19. windows更换壁纸cmd命令,window修改注册表更换壁纸,已设壁纸缓存地址
  20. 2012年度最佳Web前端开发工具和框架总结

热门文章

  1. java atm 代码_java ATM取钱代码
  2. poj3259(SPFA算法)
  3. poj2756(高精度加减)
  4. 计算机虚拟网络毕业论文,计算机毕业论文——基于WEB的虚拟计算机网络实验平台.doc...
  5. html边框绕着图片,CSS 边框
  6. python中采用字典建立统,Python中使用Counter进行字典创建以及key数量统计的方法...
  7. Djkastra堆(手写堆)优化版
  8. php 分类标签推荐,MySQL / PHP:通过标签/分类法查找类似/相关的项目
  9. java session缓存_Java服务端采用Session的缓存oauth2.0授权用户信息
  10. 简述java中的注释以及用法_怎样理解 Java 注解和运用注解编程?