学习MyBatis源码(一)

MyBatis由于其以易使用性和学习成本较低,让大多人都会在项目选择使用MyBatis,但使用了那么久的MyBatis,慢慢的就想深入的了解一下MyBatis到底是如何工作。

如何了解MyBatis的工作机制?最好的办法就是看它的源码。那么如何来看MyBatis的源码呢?

介绍一下我看源码的方法,就是先从整体来看,接着根据自己的经验,先去推测这么一个机制或者方法可能的一个实现方法,然后带着自己的推测去源码中用debug的模式去寻找答案。这样子看源码不仅能让目的性更强,同时也更快的提升自己的代码水平,因为这样阅读源码,每一次都是将你的想法和那些优秀的开发大神的思路去碰撞,慢慢的你就变得和那些大神一样,去设计和开发程序。

下面开始阅读MyBatis的源码。

首先先介绍一下什么是MyBatis。对于这个问题,很多人可能第一反应就是MyBatis是一个半自动化的基于SQL的持久层框架。但是这些都是别人从官网上看到,然后自己的解读,不是你的解读,所以不妨抛开别人的理解,自己去官网 看看是如何解释什么是MyBatis。

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

  1. 从整体来看
    先来了解一下MyBatis的整体的一个流程。
    学习MyBatis源码(一)_第1张图片
    图来自CZengze的博客
    项目启动之后,MyBatis会先读取配置文件,然后再通过SqlSessionFactoryBuilder的build方法来建立SqlSessionFactory。在SqlSessionFactoryBuilder中build()有多个实现,供不同的条件下使用,之后在通过SqlSessionFactory来创建SqlSession。在MyBatis中所有的操作都是基于SqlSession来完成的,SqlSession的生命周期是Method的级别的。
    可以通过以下代码用debug的形式来体会一下MyBatis的运行流程
  public static void main(String[] args)throws Exception {
        InputStream resourceAsStream = Resources.getResourceAsStream("mybatis.xml");
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        SqlSessionFactory build = sqlSessionFactoryBuilder.build(resourceAsStream);
        SqlSession sqlSession = build.openSession();
        Connection connection = sqlSession.getConnection();
        sqlSession.select("select * from 1", new ResultHandler() {
            @Override
            public void handleResult(ResultContext resultContext) {
                resultContext.getResultCount();
            }
        });
       connection.close();
    }

你可能感兴趣的:(MyBatis)