MyBatis源码(1)—— MyBatis架构梗概

本文介绍了如何系统地阅读MyBatis源码,首先提出先理解框架架构,再看模块代码的建议。接着,对MyBatis的架构进行了概述,包括Configuration、Session、Executor等关键组件,并给出了一个简单的1.0版本Demo,展示了MyBatis的基本功能。文章最后提到1.0版本的不足和改进方向,为后续深入阅读MyBatis源码做准备。
摘要由CSDN通过智能技术生成

目录

一、 我是如何看源码的

二、MyBastis架构

1. 预先分析一下MyBatis的骨架

2. 根据这个架构写出一个MyBatis的1.0版本Demo

3. 看1.0版本有哪些不足,该添加些什么,该怎样升级

4. 开始看真实的MyBatis源码, 理出其骨架

5. 查看MyBatis源码中的各模块代码,查看相互联系和代码实现


一、 我是如何看源码的

   

     看框架原码是提高代码设计能力的一个重要的途径。通过学习大牛的优秀代码和设计思想,我们既能够更深地理解框架的底层原理,又能够强化代码的架构能力。

    但是开源框架通常都是比较大的项目,盲目地一头扎到代码中去逐行看,可能会摸不着头脑,没有成就感,而一点点地耗尽热情,最终收效甚微。

    我的建议是—— 先抓梗概,后看模块,带着问题看代码

 

    我通常的做法是

    1. 在看源码之前,设想如果自己来设计这个框架的话会怎么写

         根据框架的功能和暴露的接口,写一个小Demo, 可以写的很简单,接口里甚至只打印一句话都行,关键是思考着对框架进行分层和功能模块划分,只实现最核心的逻辑。  

         这样能让自己提起好奇心,以便看代码时不会倦怠。同时这是自己设计能力的一个答卷,后面将对照着标准答案(真实的框架代码设计情况)进行评判,找到自己的不足和更好的优化方式。

    2. 先看框架梗概,不陷入具体细节,列出整个框架的骨架图和各模块之间的关系;之后再按功能看各个模块的代码实现

         过早地陷入代码细节,会导致只见树木不见森林;先搭好骨架再去填充细节要相对容易得多。

 

    3. 看完代码之后按真实的框架再写一个demo,前面写的demo哪个地方不好?该怎样优化? 

         不懂的地方可以猜测再debug一下。

         多问些关键问题,找关键类联系起来。

 

二、MyBastis架构

    我们以MyBastis为例来看一下框架源码。

1. 预先分析一下MyBatis的骨架

      我们先看一下MyBatis的常用例子:

SqlSession session = null;
try{
      //创建SessionFactory对象,读取配置信息
      SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(
                                      Resources.getResourceAsStream("mybatis-config.xml"));

      //创建一个session
      session = factory.openSession();
      
      PersonMapper personMapper = session.getMapper(PersonMapper.class);

      //Mybatis通过mapper代理直接执行查询方法
      Person person= personMapper.selectOne(1001);
      System.out.println(person);
}
catch(Exception e){
    e.printStackTrace();
}
finally{
    if(null != session){
        session.close();
    }
}

    从这些应用信息来看,我们能知道MyBatis:

    (1)要有一个Configuration类,负责解析xml配置文件, 将相应的配置读进来并存储到Map中,包括DB相应的配置、包名.类名.方法名 与SQL语句之间的转换配置、以及其他的配置等。

    (2)Session类, 要建立与DB的连接,根据调用的情况执行相应的SQL语句并返回相应的结果;如果Session类的功能太多会导致耦合,不妨将与DB打交道的功能单独封装到一个Executor类中(至于叫什么无所谓)。

    (3)Session类需要提供一个getMapper() 方法, 根据类名生成相应的代理来调用想要的方法,肯定要用到动态代理,再封装一个动态代理类MapperProxy。

      至于SessionFactory和SessionFactoryBuilder不属于核心功能,后续再去添加。

    这些是最基本的骨架,我们根据这些基本的功能来搭建MyBatis的1.0版本的Demo。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值