版权声明:本文为博主原创文章,转载需注明原文链接及作者。 https://blog.csdn.net/ylforever/article/details/80030777
在开发过程中经常需要从数据库批量查询某类对象的主键ID与其中一个属性值的映射关系。目的是在接下来的业务处理中用主键ID去索引提起该属性值,这样做可以减少数据库查询次数,提高效率。
但是在mybatis中没有直接查询返回map结果的接口(也许有,只是我不知道)。下面给出一种简易的方式能达到同样的目的。
一、定义一个辅助类,用于存储从数据库中查询的主键和属性值
package com.elon.springbootdemo.model;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 查询辅助处理类。将查询的字段转换为Map结构。
*
* @author elon
* @version 2018年4月21日
*/
public class QueryMapHelper<K, V> {
/**
* 用作Key的字段值
*/
private K key;
/**
* 用作value的字段值
*/
private V value;
public K getKey() {
return key;
}
public void setKey(K key) {
this.key = key;
}
public V getValue() {
return value;
}
public void setValue(V value) {
this.value = value;
}
/**
* 将查询结果由列表转换为Map结构
* @param resultList 查询结构列表
* @return Map结果
*/
public static <K, V> Map<K, V> toMap(List<QueryMapHelper<K, V>> resultList) {
Map<K, V> valueMap = new HashMap<>();
resultList.forEach((result) -> valueMap.put(result.getKey(), result.getValue()));
return valueMap;
}
}
二、在Mapper层的查询接口返回该辅助类对象的列表
/**
* 查询所有用户的ID和年龄信息。
* @return 数据列表
*/
@Select("select id, age from tbl_user")
@Results({
@Result(property="key", column="id"),
@Result(property="value", column="age")
})
List<QueryMapHelper<Integer, Integer>> queryUserAge();
三、在客户层代码将List转换为Map
@RequestMapping(value="/v2/query-user-age", method=RequestMethod.GET)
public Map<Integer, Integer> queryUserAge(){
/**
* 将查询结果列表转换为Map结构
*/
Map<Integer, Integer> userAgeMap = QueryMapHelper.toMap(userMapper.queryUserAge());
return userAgeMap;
}
QueryMapHelper模型是一个通用模型,可以给所有需要做类似处理的接口公用。通过几句简单的代码完成转换。