package com.example.aninbatis.sqlsession;import com.example.aninbatis.config.Configuration;import com.example.aninbatis.config.MappedStatement;import com.example.aninbatis.executor.CachingExecutor;import com.example.aninbatis.executor.Executor;import com.example.aninbatis.executor.SimpleExecutor;import java.util.List;/** * 默认的sqlSession实现 */public class DefaultSqlSession implements SqlSession { private Configuration configuration; public DefaultSqlSession(Configuration configuration) { this.configuration = configuration; } @SuppressWarnings("unchecked") @Override public <T> T selectOne(String statementId, Object param) { List<Object> list = this.selectList(statementId, param); if (list == null || list.size() == 0) { return null; } else if (list.size() == 1) { return (T) list.get(0); } else { throw new RuntimeException("只能返回一个对象"); } } @Override public <T> List<T> selectList(String statementId, Object param) { // 根据statementId获取MappedStatement对象 MappedStatement mappedStatement = configuration.getMappedStatementById(statementId); // 执行Statement的操作(执行方式有多种:一种是带有二级缓存的执行方式、一种是基本执行方式[只带有一级缓存,基本执行方式又分成几种:基本执行器、批处理执行器等]) // 此处可以考虑放到MappedStatement对象中,该对象中可以根据是否配置了二级缓存来确定创建的是哪个Executor Executor executor = new CachingExecutor(new SimpleExecutor()); return executor.query(mappedStatement, configuration, param); }}