dbutils 别名问题,dbutils MapHandler、MapListHandler 别名解决办法.
最近在赶一个项目,刚好用了apache 的 dbuils 做持久层(hibernate太笨重了) ,这个dbutisl比较轻便。在使用过程中用到了多表查询数据,返回的数据是一个map,发现了dbutisl 的一个不太合理的地方(也不能算是bug),就是多表查询返回map时MapListHandler 不能使用别名,只要是设计别名的都查询不到数据,而通过工具单独运行sql查询结果是没问题的,查看了 dbutisl 的源码发现了原因:BasicRowProcessor 类的 tomap 方法不合适得改改。见截图;

即:将 result.put(rsmd.getColumnName(i), rs.getObject(i));
改为:result.put(rsmd.getColumnLabel(i), rs.getObject(i));
就可以使用别名了。
同时上传了我改后的jar文件,我是在jdk1.5的环境编译的jar
备注:我用的dbutils 的版本是 1.4(最新)
本文详细介绍了在使用dbutils进行多表查询时遇到的问题,即使用别名时MapListHandler无法正常工作。通过分析dbutils源码,发现原因在于BasicRowProcessor类的tomap方法。作者提出解决方案,将原有的result.put(rsmd.getColumnName(i),rs.getObject(i));更改为result.put(rsmd.getColumnLabel(i),rs.getObject(i));从而成功解决了别名问题,并分享了修改后的jar文件。
303

被折叠的 条评论
为什么被折叠?



