Java编程基础:如何实现Mybatis查询数据库返回Map结构的数据

版权声明:本文为博主原创文章,转载需注明原文链接及作者。 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模型是一个通用模型,可以给所有需要做类似处理的接口公用。通过几句简单的代码完成转换。

猜你喜欢

转载自blog.csdn.net/ylforever/article/details/80030777
今日推荐