MyBatis源码简析

本人目前水平有限,后期深入学习后会补上不足的地方,感谢阅览。

分析代码:

public static void main(String[] args) throws IOException {
    InputStream is = Resources.getResourceAsStream("mybatis.xml");
    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
    SqlSession session = factory.openSession();

    List list = session.selectList("a.b.showAll");
    session.selectOne("a.b.c");
    for (Flower flower : list) {
        System.out.println(flower);
    }
    session.close();
}

InputStream is = Resources.getResourceAsStream("mybatis.xml");

  • Resources调用静态方法getResouceAsStream来解析mybatis.xml文件,得到InputStream

SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);

  • XMLConfigBuilder读取流中内容并转换成Java代码
  • parser.parse()返回一个Configuration对象,将生成的Java代码封装到Configuration对象中
  • DefaultSqlSessionFactory:SqlSessionFactory接口的实现类

SqlSession session = factory.openSession();

  • Transaction:事务类,每个SqlSession都会带有一个Transaction对象
  • Environment:对象对应mybatis.xml中的environments节点
  • TransactionFactory:事务工厂,负责生产Transation
  • Executor:MyBatis执行器,相当于JDBC中的statement(preparedStatement)对象
  • DefaultSqlSession:SqlSession 接口的实现类
  • ExceptionFactory:MyBatis 中异常工厂

文字描述

  1. 在Mybatis运行开始时先通过Resources加载全局配置文件,然后通过SqlSessionFactoryBuilder构建起创建SqlSessionFactory接口的实现类DefaultSqlSessionFactory。
  2. 在实例化DefaultSqlSessionFactory之前需要先创建XmlConfigBuilder解析全局配置文件流,并将解析结果放在Configuration中,然后将Configuration传递给DefalutSqlSessionFactory。
  3. SqlSessionFactory工厂创建SqlSession。
  4. 每次创建SqlSession时,都先要TransationFactory创建Transaction对象。同时会创建Executor执行器,回后实例化DefaultSqlSession完成SqlSession对象的创建。
  5. 执行CRUD操作。
  6. 执行失败则rollback回滚。
  7. 执行成功则提交事务,关闭SqlSession。

你可能感兴趣的:(MyBatis源码简析)