美文网首页互联网开发手记
mybatis从使用到了解(二)_理解mybatis的生命周期

mybatis从使用到了解(二)_理解mybatis的生命周期

作者: YONGSSU的技术站点 | 来源:发表于2017-01-02 23:10 被阅读49次

从上文的最终测试类,可以发现最终主要涉及到几个类:Resources,SqlSessionFactoryBuilder,SqlSessionFactory,SqlSession.本文希望通过对这几个类进行说明,来了解一下mybatis的声明周期.

先了解一下这几个类主要做了什么

  • Resources
    读取配置文件的工具类.
  • SqlSessionFactoryBuilder
    构建SqlSessionFactory.
  • SqlSessionFactory
    mybatis应用的中心,一般一个mybatis的应用实例对应一个SqlSessionFactory.一旦被创建,在应用的运行期间就会一直存在.而且最佳实践是在应用运行期间不要重复创建.
  • SqlSession
    完全包含了面向数据库执行SQL命令所需的所有方法.

mybatis的生命周期

  • 从config.xml配置文件中构建SqlSessionFactory
private static SqlSessionFactory sqlSessionFactory;
    static {
        try {
            Reader reader = Resources.getResourceAsReader("config.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
  • 从SqlSessionFactory中获取SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
  • 通过SqlSession执行sql查询语句,并将sql查询结果映射到java对象
try {
   Student student = sqlSession.selectOne("com.yongssu.mybatis.demo1.StudentMapper.selectStudentById", 1);
   System.out.println(student);
} finally {
   sqlSession.close();
}

通过跟踪分析源码,发现selectOne最终执行了了这么一个函数.

public <E> List<E> selectList(String statement, Object parameter, RowBounds rowBounds) {
 try {
   // 通过配置文件获取执行sql,参数以及映射对象
   MappedStatement ms = configuration.getMappedStatement(statement);
   // 执行查询并进行结果映射
   return executor.query(ms, wrapCollection(parameter), rowBounds, Executor.NO_RESULT_HANDLER);
 } catch (Exception e) {
   throw ExceptionFactory.wrapException("Error querying database.  Cause: " + e, e);
 } finally {
   ErrorContext.instance().reset();
 }
}

相关文章

网友评论

    本文标题:mybatis从使用到了解(二)_理解mybatis的生命周期

    本文链接:https://www.haomeiwen.com/subject/zdrgvttx.html