Mybatis原理理解章二(SqlSession工作过程)

原创
2018/03/14 17:12
阅读数 1.2K

一,开启数据库访问会话,创建SqlSession对象。

     SqlSession sqlSession = factory.openSession();   

     MyBatis封装了对数据库的访问,把对数据库的会话和事务控制放到了SqlSession对象中。

二,为SqlSession传递一个配置的Sql语句的Statement Id和参数,并返回接口:

  MyBatis在初始化的时候,会将MyBatis的配置信息全部加载到内存中,

  加载到内存中会生成一个对应的MappedStatement对象。

  然后以key为"Statement Id",value为MappedStatement对象的形式维护到Configuration的一个Map中,需要使用的时候,通过Id值来获取。

  使用org.apache.ibatis.session.Configuration实例来维护。

  使用者可以使用sqlSession.getConfiguration()方法来获取。

  MyBatis的配置文件中配置信息的组织格式和内存中对象的组织格式几乎完全对应。

  SqlSession根据Statement ID, 在mybatis配置对象Configuration中获取到对应的MappedStatement对象,然后调用mybatis执行器来执行具体的操作。

三,MyBatis执行器Executor根据SqlSession传递的参数执行query()方法。

   根据传递的参数,完成SQL语句的动态解析,生成BoundSql对象,供StatementHandler使用;

   为查询创建缓存。

   创建JDBC的Statement连接对象,传递给StatementHandler对象,返回List查询结果。

四, StatementHandler对象负责设置Statement对象中的查询参数、处理JDBC返回的resultSet,将resultSet加工为List 集合返回

    对于JDBC的PreparedStatement类型的对象,创建的过程中,使用的是SQL语句字符串会包含若干个占位符,通过StatementHandler通过parameterize(statement)方法对Statement 再对占位符进行设值。

   StatementHandler通过List<E> query(Statement statement, ResultHandler resultHandler)方法来完成执行Statement,和将Statement对象返回的resultSet封装成List。

五,StatementHandler 的parameterize(statement)作用

 StatementHandler的parameterize(Statement) 方法调用 ParameterHandler的setParameters(statement) 方法,ParameterHandler的setParameters(Statement)方法负责输入的参数,对statement对象的占位符处进行赋值。

六,StatementHandler 的List<E> query(Statement statement, ResultHandler resultHandler)作用

    StatementHandler 的List<E> query(Statement statement, ResultHandler resultHandler)方法的实现,调用ResultSetHandler的handleResultSets(Statement) 方法。ResultSetHandler的handleResultSets(Statement) 方法会将Statement语句执行后生成的resultSet 结果集转换成List<E> 结果集。

 

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享