首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Spring中的query步骤

2012-10-27 
Spring中的query方法?? ?Spring的JdbcTemplate把Jdbc进行了封装,下面我们来看一下它的query(String sql,Ro

Spring中的query方法

?? ?Spring的JdbcTemplate把Jdbc进行了封装,下面我们来看一下它的query(String sql,RowMapper rowMapper);的具体实现。

?? ?首先,query方法会调用下面一段代码:

public List query(String sql, RowMapper rowMapper) throws DataAccessException {return (List) query(sql, new RowMapperResultSetExtractor(rowMapper));}

?? 我们发现,Spring把调用的请求交给了一个更为抽象的query方法,而且更重要的是new RowMapperResultSetExtractor(rowMapper),将rowMapper交给了一个专门处理结果集的类。

那下面让我们看看这个更为抽象的query方法到底干了什么

public Object query(final String sql, final ResultSetExtractor rse) throws DataAccessException {Assert.notNull(sql, "SQL must not be null");Assert.notNull(rse, "ResultSetExtractor must not be null");if (logger.isDebugEnabled()) {logger.debug("Executing SQL query [" + sql + "]");}class QueryStatementCallback implements StatementCallback, SqlProvider {public Object doInStatement(Statement stmt) throws SQLException {ResultSet rs = null;try {rs = stmt.executeQuery(sql);ResultSet rsToUse = rs;if (nativeJdbcExtractor != null) {rsToUse = nativeJdbcExtractor.getNativeResultSet(rs);}return rse.extractData(rsToUse);}finally {JdbcUtils.closeResultSet(rs);}}public String getSql() {return sql;}}return execute(new QueryStatementCallback());}
??它主要的工作是通过一个内部类实现的,内部类首先执行用户传入的sql语句,得到结果集然后调用ResultSetExtractor 类的extractData()方法得到处理之后的结果集,其实就是一个List集合。

热点排行