Mybatis源码分析

  • Mybatis简单实例

@Test
    public void test01() throws IOException {
        // 1、获取sqlSessionFactory对象
        SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
        // 2、获取sqlSession对象
        SqlSession openSession = sqlSessionFactory.openSession();
        try {
            // 3、获取接口的实现类对象
            //会为接口自动的创建一个代理对象,代理对象去执行增删改查方法
            EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
            //4、执行查询
            Employee employee = mapper.getEmpById(1);
            System.out.println(mapper);
            System.out.println(employee);
        } finally {
            openSession.close();
        }
  • Mybatis四大重要对象

  1. Executor:用于执行mybatis的增删改查操作
  2. StatementHandle:处理sql预编译设置参数等相关工作
  3. ParameterHandle:设置预编译参数用的
  4. ResultSetHandle:处理结果集
  • 源码分析(根据以上1,2,3,4)

  1. 获取sqlSessionFactory对象:
    解析文件的每一个信息保存在Configuration中,返回包含Configuration的DefaultSqlSession;
    注意:【MappedStatement】:代表一个增删改查的详细信息
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();  
Mybatis源码分析_第1张图片
getSqlSessionFactory流程图
  1. 获取sqlSession对象
    返回一个DefaultSQlSession对象,包含Executor和Configuration;
    这一步会创建Executor对象;
SqlSession openSession = sqlSessionFactory.openSession();
Mybatis源码分析_第2张图片
获取sqlSession
  1. 获取接口的代理对象(MapperProxy)
    getMapper,使用MapperProxyFactory创建一个MapperProxy的代理对象
    代理对象里面包含了,DefaultSqlSession(Executor)
         EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
Mybatis源码分析_第3张图片
获取接口的代理对象
  1. 查询流程
   Employee employee = mapper.getEmpById(1);
Mybatis源码分析_第4张图片
mapper.getEmpById(1)
  1. 流程总结如图


    Mybatis源码分析_第5张图片
    流程总结
  • 插件原理简介

Mybatis源码分析_第6张图片
image.png

你可能感兴趣的:(Mybatis源码分析)