深入理解MyBatis(四)—MyBatis的Select操作执行流程
MyBatis的操作主要分为update类和select类;insert操作,delete操作,update操作都是通过update操作实现;
个人主页:tuzhenyu’s page
原文地址:深入理解MyBatis(四)—MyBatis的Select操作执行流程
Select操作流程
(1) 执行查询操作
- 获取sqlSession后,调用selectOne()作为select操作的入口
String statement = "mybatis.mapping.userMapper.getUser";
User user = session.selectOne(statement,1);
- selectOne()执行的逻辑是调用selectList()方法并判断结果list的长度;
@Override
public <T> T selectOne(String statement, Object parameter) {
// Popular vote was to return null on 0 results and throw exception on too many.
List<T> list = this.<T>selectList(statement, parameter);
if (list.size() == 1) {
return list.get(0);
} else if (list.size() > 1) {
throw new TooManyResultsException("Expected one result (or null) to be returned by selectOne(), but found: " + list.size());
} else {
return null;
}
}
- selectList()操作和update()操作类似,先通过statement字符串从configuration中获取对应的MappedStatement实例,再调用executor的query()方法;
@Override
public <E> List<E> selectList(String statement, Object parameter) {
return this.selectList(statement, parameter, RowBounds.DEFAULT);
}
@Override
public <E> List<E> selectList(String statement, Object parameter, RowBounds rowBounds) {
try {
MappedStatement ms = configuration.getMappedStatement(statement);
return executor.query(ms, wrapCollection(parameter), rowBounds, Executor.NO_RESULT_HANDLER);
} catch (Exception e) {