public static void main(String[] args) throws IOException {
/*
* Resources是MyBatis.io包中的类, 此方法在ClassLoaderWrapper类中先得到一个类加载器数组, 然后找到类加载器数组中不为null的类加载器,
* 使用该类加载器去加载mybatis配置文件, getResourceAsStream()是ClassLoader原生方法, 加载指定文件返回InputStream
*/
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
/*
* 调用xml包中XMLConfigBuilder类的parseConfiguration()方法, 主要作用有2个:
* 1.解析mybatis-config.xml配置文件的值到Configuration对象中
* 2.解析xml映射文件, 通过解析里面的select/insert/update/delete节点, 每一个节点生成一个MappedStatement对象, 最后存入Configuration中名为mappedStatements的Map中, key为Mapper的namespace+节点id
*
* 解析完毕后返回Configuration对象并传递给重载的build(), 在build()方法中根据Configuration创建一个DefaultSqlSessionFactory并返回(SqlSessionFactory是接口, DefaultSqlSessionFactory是该接口的实现类)
*/
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
/*
* 从Configuration中获取对应的值, 构建一个DefaultSqlSession并返回, 构建时指定了Executor和是否自动提交(SqlSession是一个接口, DefaultSqlSession是其实现类)
*/
SqlSession session = sqlSessionFactory.openSession(true); //设置自动提交, 否则需要调用 session.commit() 手动提交
/*
* 最终在MapperProxyFactory的newInstance()方法中通过JDK动态代理为自定义Mapper接口生成代理实例
*/
Mapper mapper = session.getMapper(Mapper.class);
String time = mapper.selectTimeById(1);
System.out.println("time=" + time);
session.close();
}
MyBatis的执行流程
最新推荐文章于 2022-09-09 21:20:01 发布