本篇内容介绍了“Mybatis中ResultSetHandler的用法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

创新互联公司是网站建设技术企业,为成都企业提供专业的做网站、成都做网站,网站设计,网站制作,网站改版等技术服务。拥有10多年丰富建站经验和众多成功案例,为您定制适合企业的网站。10多年品质,值得信赖!
mybatis-3.4.6.release.
ResultSetHandler是个接口,如List-1
List-1
public interface ResultSetHandler {
//将结果转换为List
List handleResultSets(Statement stmt) throws SQLException;
//将结果转换为游标Cursor
Cursor handleCursorResultSets(Statement stmt) throws SQLException;
void handleOutputParameters(CallableStatement cs) throws SQLException;
}
实现类只有DefaultResultSetHandler,实现有点复杂,因为要考虑的情况很多。
结果封装原理
List-2
如List-2, 定义这样一个ResultMap后,使用ObjectFactory创建一个Person对象,
person.setId(resultSet.getInt("id"))
person.setUsername(resultSet.getString("username"))
person.setPassword(resultSet.getString("password"))
person.setFltNum(resultSet.getString("flt_num"))
不过这个转换过程在实现上很复杂,其中就用到TypeHandler。
开始之前,来看下ResultSetWrapper,如下List-3,通过ResultSet获取ResultSetMetaData来获取列的属性,遍历列,获取列名称、列类型、对应的JdbcType。
List-3
public ResultSetWrapper(ResultSet rs, Configuration configuration) throws SQLException {
super();
this.typeHandlerRegistry = configuration.getTypeHandlerRegistry();
this.resultSet = rs;
final ResultSetMetaData metaData = rs.getMetaData();
final int columnCount = metaData.getColumnCount();
for (int i = 1; i <= columnCount; i++) {
columnNames.add(configuration.isUseColumnLabel() ? metaData.getColumnLabel(i) : metaData.getColumnName(i));
jdbcTypes.add(JdbcType.forCode(metaData.getColumnType(i)));
classNames.add(metaData.getColumnClassName(i));
}
}
来看DefaultResultSetHandler的handleResultSets方法,
List-4
public List