1.查询操作
SqlSession中定义的查询有以下这些:
<T> T selectOne(String statement);
<T> T selectOne(String statement, Object parameter);
<E> List<E> selectList(String statement);
<E> List<E> selectList(String statement, Object parameter);
<E> List<E> selectList(String statement, Object parameter, RowBounds rowBounds);
<K, V> Map<K, V> selectMap(String statement, String mapKey);
<K, V> Map<K, V> selectMap(String statement, Object parameter, String mapKey);
<K, V> Map<K, V> selectMap(String statement, Object parameter, String mapKey, RowBounds rowBounds);
<T> Cursor<T> selectCursor(String statement);
<T> Cursor<T> selectCursor(String statement, Object parameter);
<T> Cursor<T> selectCursor(String statement, Object parameter, RowBounds rowBounds);
void select(String statement, Object parameter, ResultHandler handler);
void select(String statement, ResultHandler handler);
void select(String statement, Object parameter, RowBounds rowBounds, ResultHandler handler);
其中最关键的方法就是selectList,观察其方法实现,其实不管是selectOne还是selectMap,其方法都会调用selectList方法进行查询数据,如下:
/**
* 查询一个
*/
@Override
public <T> T selectOne(String statement, Object parameter) {
//调用selectList方法查询数据
List<T> list = this.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 { //没有数据返回null
return null;
}
}
@Override
public <K, V> Map<K, V> selectMap(String statement, Object parameter, String mapKey, RowBounds rowBounds) {
//调用selectList进行查询
final List<? extends V> list = selectList(statement, parameter, rowBounds);
//后面是组装结果
final DefaultMapResultHandler<K, V> mapResultHandler = new DefaultMapResultHandler<>(mapKey,
configuration.getObjectFactory(), configuratio