本人目前水平有限,后期深入学习后会补上不足的地方,感谢阅览。
分析代码:
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<Flower> 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 中异常工厂
文字描述
- 在Mybatis运行开始时先通过Resources加载全局配置文件,然后通过SqlSessionFactoryBuilder构建起创建SqlSessionFactory接口的实现类DefaultSqlSessionFactory。
- 在实例化DefaultSqlSessionFactory之前需要先创建XmlConfigBuilder解析全局配置文件流,并将解析结果放在Configuration中,然后将Configuration传递给DefalutSqlSessionFactory。
- SqlSessionFactory工厂创建SqlSession。
- 每次创建SqlSession时,都先要TransationFactory创建Transaction对象。同时会创建Executor执行器,回后实例化DefaultSqlSession完成SqlSession对象的创建。
- 执行CRUD操作。
- 执行失败则rollback回滚。
- 执行成功则提交事务,关闭SqlSession。