以map接收数据库中查询到的多行结果


通常在数据库查询返回多行结果时,会以list形式来接收。但遍历list毕竟麻烦且耗时,不如直接返回map处理起来简单。

jdbc形式 代码如下:


Map<String, Map<String, Object>> map=new HashMap<String, Map<String, Object>>(2048);
Connection con = PoolManager.getConnection();;
PreparedStatement pst = con.prepareStatement(sql);
ResultSet rs = pst.executeQuery();
ResultSetMetaData md = rs.getMetaData();
int columnCount = md.getColumnCount();
while (rs.next()) {
    Map<String, Object> objectMap=new HashMap<String, Object>(16);
    for (int i = 1; i <= columnCount; i++) {
        objectMap.put(md.getColumnName(i), rs.getObject(i));
    }
    map.put(String.valueOf(rs.getObject(1)),objectMap);//key objectMap(字段名,字段值)
}
PoolManager.freeConnection(con);

连接池可参考http://blog.csdn.net/yaerfeng/article/details/7076452

mybaits

mybatis中也可以做类似处理,有两种方式,1)在mapper文件中增加注解MapKey(“列名”),则列名即为key值 2)则重写ResultHandler接口

https://segmentfault.com/a/1190000004278833 MapKey
http://blog.csdn.net/sou_liu/article/details/47755635 重写ResultHandler接口

下文为使用Mybatis拦截器实现Mybatis查询返回Map的一种方法,可指定key,value归属列
http://blog.csdn.net/zylzb/article/details/40511055

lambda

当然,使用lambda表达式要更简单一些……

List<Person> personList;
Map<Long, Person> mapPerson = personList.stream().collect(Collectors.toMap(Person::getId, p -> p));
Map<Long, List<Person>> personMap = personList.stream().collect(Collectors.groupingBy(p -> p.getId()));
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值