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


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

jdbc形式 代码如下:


Map> map=new HashMap>(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 objectMap=new HashMap(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 personList;
Map mapPerson = personList.stream().collect(Collectors.toMap(Person::getId, p -> p));
Map> personMap = personList.stream().collect(Collectors.groupingBy(p -> p.getId()));

你可能感兴趣的:(sql)