String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession openSession = sqlSessionFactory.openSession();
Mapper mapper = openSession.getMapper(Mapper.class);
Object object= mapper.getEmpById(1);
- new SqlSessionFactoryBuilder().build(inputStream);创建sqlSessionFactory,在 sqlSessionFactory中有configuration属性,它保存了全局配置文件和sql映射文件的所有信息,下面就是configuration中保存了所有信息。
其中,较为重要的为mappedStatements,它对应着mapper映射文件中也每个增删改查标签。还有mapperRegistry,它保存了每个接口的代理工厂。
2.sqlSessionFactory.openSession(); 创建一个DefaultSqlSession对象,他里面包含Configuration以及Executor(根据全局配置文件中的defaultExecutorType创建出对应的Executor)
3.DefaultSqlSession.getMapper():拿到Mapper接口对应的MapperProxy;DefaultSqlSession里包含了Configuration以及Executor,利用Configuration中保存的mapperRegistry,创建对应类型的代理对象MapperProxy。MapperProxy里面有DefaultSqlSession。
4.mapper.getEmpById(1); 执行代理对象的增删改查方法,会调用调用DefaultSqlSession的增删改查也就是Executor中的增删改查方法。
1)、Executor会创建一个StatementHandler对象(同时也会创建出ParameterHandler和ResultSetHandler)
2)、调用StatementHandler使用ParameterHandler来给sql设置参数预编译参数以及设置参数值 (java类型参数转成sql类型)
3)、调用StatementHandler的增删改查方法;
4)、ResultSetHandler封装结果(sql类型转成java类型)