关于MyBatis中DefaultSqlSession的select方法实现的疑问
MyBatis SqlSession select方法的调用与核心实现解析
- 四参数select方法的调用逻辑
你看到的简化版select方法,调用的是DefaultSqlSession类内部的四参数重载select方法,这个方法是类的核心重载方法,只是你可能没定位到对应的代码段。它的完整定义大致如下:
@Override public void select(String statement, Object parameter, RowBounds rowBounds, ResultHandler handler) { try { MappedStatement ms = configuration.getMappedStatement(statement); executor.query(ms, wrapCollection(parameter), rowBounds, handler); } catch (Exception e) { throw ExceptionFactory.wrapException("Error querying database. Cause: " + e, e); } finally { ErrorContext.instance().reset(); } }
MyBatis中所有SqlSession的select重载方法,最终都会路由到这个四参数方法上。
- select语句的根本实现位置
真正执行SQL查询的核心逻辑在Executor接口的实现类中,比如SimpleExecutor、ReuseExecutor、BatchExecutor等。上述四参数select方法里调用的executor.query()就是执行入口,Executor的实现类会完成SQL解析、参数绑定、数据库执行、结果集映射等全流程操作。
内容的提问来源于stack exchange,提问作者ygh
相关产品推荐
相关产品推荐

