Mybatis 返回Map类型结果集

本文介绍了Mybatis中如何处理Map类型的结果集,包括Mybatis自带的将Object映射为Map的功能,以及如何通过自定义拦截器将数据库查询结果转换为key-value形式的Map,并提供了相关拦截器的参考资料。
摘要由CSDN通过智能技术生成

1、key ==> Object(非基础类型),Mybatis自带功能

mapper.xml 配置 resultType="java.util.Map"
mapper.java 配置 @MapKey("key") // "key"表示需要当key的字段名
mapper.java 配置 Map<Stirng, Object> methodName()

或

mapper.java 配置 @MapKey("key") // "key"表示需要当key的字段名
mapper.xml 配置 resultType="com.clyy.entity.User"
mapper.java 配置 Map<Stirng, User> methodName()

    注意:此处的Object 一般为java.util.Map,当配置为Map时需要注意Map的value.class 是Object,就算代码定义为String,也不一定会转换为String,实际类型会根据数据库的字段值类型来确定


2、key ==> value(基础类型),自定义拦截器
    自定义拦截器资料:http://www.cnblogs.com/waterystone/p/6214322.html
    拦截器原理资料:http://www.cnblogs.com/fangjian0423/p/mybatis-interceptor.html
    注意:此拦截器默认查询数据中的第一个字段为Key,第二个字段为Value。可配置@MapToKeyValue来定义keyColumnName、valueColumnName的字段名

// 自定义注解 @MapToKeyValue

/**
 * Auther: Charles.Chen <br>
 * Description: Mybatis返回Map<Object, Object>数据定义注解(Object为基础类型)
 * Date: Create in 17:37 2018/6/5
 **/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD })
public @interface MapToKeyValue {

	/**
	 * 是否允许Key重复,默认true,若设置为false,且出现了重复Key,则抛出:org.springframework.dao.DuplicateKeyException
	 * @return
	 */
	boolean isAllowKeyRepeat() default true;

	/**
	 * 是否允许value覆盖,默认true,若设置为true时,当出现Key重复且isAllowKeyRepeat = true时,将覆盖原有的value值
	 * @return
	 */
	boolean isValueOverride() default true;

	/**
	 * Map.Key的字段名,无值默认为第一个字段值为Key
	 * @return
	 */
	String keyColumnName() default "";

	/**
	 * Map.Value的字段名,无值默认为第二个字段值为Value
	 * @return
	 */
	String valueColumnName() default "";
}

 

// 自定义KeyValueClass ,若JDK环境中允许使用jfxrt.jar 中的Pair.java 则可直接使用Pair对象

/**
 * 
 * Description: Map对象的泛型值
 * Date: Create in 9:53 2018/6/7
 **/
public class KeyValueClass {
	Class<?> key;
	Class<?> value;

	public KeyValueClass(Class key, Class value) {
		this.key = key;
		this.value = value;
	}

	public Class<?> getKey() {
		return key;
	}

	public void setKey(Class<?> key) {
		this.key = key;
	}

	public Class<?> getValue() {
		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值