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

在开发过程中经常需要从数据库批量查询某类对象的主键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 {
	
	/**
	 * 用作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  Map toMap(List> resultList) {

		Map 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> queryUserAge();

#三、在客户层代码将List转换为Map

	@RequestMapping(value="/v2/query-user-age", method=RequestMethod.GET)
	public Map queryUserAge(){
		
		/**
		 * 将查询结果列表转换为Map结构
		 */
		Map userAgeMap = QueryMapHelper.toMap(userMapper.queryUserAge());
		return userAgeMap;
	}

QueryMapHelper模型是一个通用模型,可以给所有需要做类似处理的接口公用。通过几句简单的代码完成转换。

你可能感兴趣的:(mybatis,Java开发技术)