混用mybatis和native jdbc时,一直考虑能否直接使用定义在mybatis里面定义的resultmap,发愁
了很久。
今天终于找到了方法,旧的版本是不支持的,用了新的3.4.1。
代码如下
@SuppressWarnings("unchecked")
public static <T> List<T> getListFromResultSet(ResultSet rs, String resultMapId) throws SQLException
{
List<Object> l;
Configuration cfg = getSqlSession().getConfiguration();
ResultMap resultMap = cfg.getResultMap(resultMapId);
MappedStatement ms = cfg.getMappedStatements().iterator().next();//get first MappedStatement
DefaultResultSetHandler drsh = new DefaultResultSetHandler(null, ms, null, null, null, null);
ResultSetWrapper rsw = new ResultSetWrapper(rs, cfg);;
DefaultResultHandler resultHandler = new DefaultResultHandler(cfg.getObjectFactory()) {
@Override
public void handleResult(ResultContext<? extends Object> context)
{
super.handleResult(context);
//log.debug("{}", context.getResultObject());
}
};
drsh.handleRowValues(rsw, resultMap, resultHandler, new RowBounds(), null);
l = (List<Object>)resultHandler.getResultList();
for (Object o: l)
{
log.debug("{}", o);
}
return (List<T>)(List<?>)l;
}
handleRowValues这个函数,在以前的版本是private的。
参考了下面的url,但是他们都没给出答案
//http://www.codeproject.com/Tips/372152/Mapping-JDBC-ResultSet-to-Object-using-Annotations
//http://resultsetmapper.sourceforge.net
//http://nvry.iteye.com/blog/876076
//http://stackoverflow.com/questions/32756530/how-to-use-mybatis-to-map-values-from-resultset-to-pojo
没有评论:
发表评论