/**
* @author Clinton Begin
*/
public class SimpleStatementHandler extends BaseStatementHandler {

public SimpleStatementHandler(Executor executor, MappedStatement mappedStatement, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) {
super(executor, mappedStatement, parameter, rowBounds, resultHandler, boundSql);
}

@Override
public int update(Statement statement) throws SQLException {
//获得sql语句?
String sql = boundSql.getSql();
//获得参数?
Object parameterObject = boundSql.getParameterObject();
KeyGenerator keyGenerator = mappedStatement.getKeyGenerator();
int rows;
//statement执行sql语句返回更新数目
if (keyGenerator instanceof Jdbc3KeyGenerator) {
statement.execute(sql, Statement.RETURN_GENERATED_KEYS);
rows = statement.getUpdateCount();
keyGenerator.processAfter(executor, mappedStatement, statement, parameterObject);
} else if (keyGenerator instanceof SelectKeyGenerator) {
statement.execute(sql);
rows = statement.getUpdateCount();
keyGenerator.processAfter(executor, mappedStatement, statement, parameterObject);
} else {
statement.execute(sql);
rows = statement.getUpdateCount();
}
return rows;
}

@Override
public void batch(Statement statement) throws SQLException {
//批处理
String sql = boundSql.getSql();
statement.addBatch(sql);
}

//ResultHandler resultHandler这个参数好像没用啊
@Override
public <E> List<E> query(Statement statement, ResultHandler resultHandler) throws SQLException {
String sql = boundSql.getSql();
//statement执行sql语句
statement.execute(sql);
return resultSetHandler.<E>handleResultSets(statement);
}

@Override
protected Statement instantiateStatement(Connection connection) throws SQLException {
if (mappedStatement.getResultSetType() != null) {
return connection.createStatement(mappedStatement.getResultSetType().getValue(), ResultSet.CONCUR_READ_ONLY);
} else {
return connection.createStatement();
}
}

@Override
public void parameterize(Statement statement) throws SQLException {
// N/A
}

}