Mybatis工作原理

mybatis运行原理图:

mybatis运行流程:

public SqlSession getSession() throws IOException {
    /**
     * 1、根据xml配置文件(全局配置文件),创建一个sqlSessionFactory对象
     */
    String resource = "src/main/resources/mybatis-config.xml";
    Reader reader = Resources.getResourceAsReader(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);①

    //2、获取sqlSession实例,能直接执行已经映射的sql语句
    SqlSession sqlSession = sqlSessionFactory.openSession();②
    return sqlSession;
}
@Test
public void test1() throws IOException {
    //获取sqlSession对象
    SqlSession sqlSession = getSession();
    try {
        //获取接口的实现类
        //为接口创建一个代理对象,代理对象执行下面的操作
        EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);③
        Employee employee =  mapper.getEmployeeById(1);④
        System.out.println(employee);
    } finally {
        //关闭sqlSession对象
        sqlSession.close();
    }
}

1、首先根据全局配置文件创建SqlSessionFactory对象

2、通过SqlSessionFactory获得SqlSession对象

3、获取接口的代理对象(MapperProxy)

4、执行增删改方法


接下来探究每一处都做了些什么

一、根据配置文件创建SqlSessionFactory


其中的Configuration包含了所有配置文件的详细信息

总结:把配置文件的信息解析保存在Configuration对象中,返回了包含Configuration的DefaultSqlSession对象。

二、openSesion获取SqlSession对象



返回SqlSession的实现类DefaultSqlSession,里面包含了Executor和Configuration,Executor在这一步会被创建。

三、getMapper获取到接口的代理对象

getMapper使用了MapperProxyFactory创建了一个MapperProxy的代理对象,包代理对象中包含了

DefaultSqlSession(Executor)

四、查询的实现(增删改查的实现)


流程总结: 




大总结:

1、根据配置文件( 全局的和sql映射文件)初始化Configuration对象

2、创建一个DefaultSqlSession对象,它里面包含Configuration以及Executor(根据全局配置文件中的defaultExecutorType创建出对应的Executor) 

3、DefaultSqlSession.getMapper( )拿 到mapper接口对应的MapperProxy

4、MapperProxy里面有( DefaultSqlSession)

5、执行增删改查方法:

    1)、调用DefaultSqlSession的增删改查(Executor) 

    2)、会创建一个StatementHandler对象( 同时也会创建出ParameterHandler和ResultSetHandler)

    3)、调用StatementHandler预编译参数以及设置参数值,使用ParameterHandler来给sql设置参数

    4)、调用StatementHandler的增删改查方法

    5)、ResultSetHandler封装结果

posted @ 2018-05-24 23:22  惶者  阅读(193)  评论(0编辑  收藏  举报