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() {