想返回个特殊实体,一个Map,key是一个表的一个字段的值,value是另一个表的所有记录。参考了下网上的“攻略”,不过和攻略里面讲的有点不同,那里面key的值value的实体实在同一个表内,如果不同表,会报缺少set方法的异常。解决方法很简单,就是在实体里面加个字段对应的属性。但是并不愿意为了一个查询语句就要去改变实体。
无聊看了下session的select,提供了通过ResultHandler来处理返回的结果集。所以尝试着解决这个问题。
mapper.xml里面的配置如下:
<resultMap type="HashMap" id="testMap">
<result column="UA_INFO" property="key" />
<association property="value" resultMap="com.xxx.xxx.BaseResultMap"></association>
</resultMap>
<select id="getUaMapByTimestamp" parameterType="Map" resultMap="testMap">
SQL语句
</select>
com.xxx.xxx.BaseResultMap是另一个实体的mapper的resultMap。
这个查询,返回的每一条记录都是
{key=..., value=...}
这个结果集并不符合要求。不过通过ResultHandler来处理每一条记录就可以达到要求了。
看下Mybatis源码里面有关继承ResultHandler的DefaultMapResultHandler类。
public class DefaultMapResultHandler<K, V> implements ResultHandler {
private final Map<K, V> mappedResults;
private final String mapKey;
@SuppressWarnings("unchecked")
public DefaultMapResultHandler(String mapKey, ObjectFactory objectFactory) {
this.mappedResults = objectFactory.create(Map.class);
this.mapKey = mapKey;
}
public void handleResult(ResultContext context) {
// TODO is that assignment always true?
final V value = (V) context.getResultObject();
final MetaObject mo = MetaObject.forObject(value);
// TODO is that assignment always true?
final K key = (K) mo.getValue(mapKey);
mappedResults.put(key, value);
}
public Map<K, V> getMappedResults() {
return mappedResults;
}
}
这个DefaultMapResultHandler实现handleResult接口,处理每条数据。
可以模仿这个类写个类来装配自己所需要的Map。
private class MapResultHandler implements ResultHandler {
@SuppressWarnings("rawtypes")
private final Map mappedResults = new HashMap();
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
public void handleResult(ResultContext context) {
Map map = (Map) context.getResultObject();
mappedResults.put(map.get("key"), map.get("value"));
}
public Map getMappedResults() {
return mappedResults;
}
}
this.getSqlSession().select(getWholeSqlId("getUaMapByTimestamp"),handler);
这样就可以得到需要的结果集了。
分享到:
相关推荐
SpringBoot+Mybatis,返回Map的时候,将Map内的Key转换为驼峰的命名
mybatis返回int会报错,改成Integer封装类型可以解决,具体参考我的博客
主要介绍了Mybatis返回单个实体或者返回List的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
主要给大家介绍了关于MyBatis查询返回Map的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
主要实现向mybatis传入一个表名、map集合、页数、行数,然后实现将map的key作为查询字段名,value作为相应字段值的通用分页查询操作。
主要介绍了MyBatis-Plus 查询返回实体对象还是map,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
Spring+SpringMVC+MyBatis返回json所需jar包,SSM返回json数据,jackson包
mybatis的原身是ibatis,现在已经脱离了apache基金会。这篇文章主要介绍了Mybatis中注解@MapKey的使用的相关资料,需要的朋友可以参考下
主要介绍了Mybatis返回int或者Integer类型报错的解决办法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
今天小编就为大家分享一篇关于MyBatis Map结果的Key转为驼峰式,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
只提供代码,自己去下载相关jar包谢谢只提供代码,自己去下载相关jar包谢谢只提供代码,自己去下载相关jar包谢谢只提供代码,自己去下载相关jar包谢谢只提供代码,自己去下载相关jar包谢谢
MyBatis插入数据之后返回插入记录的id MyBatis插入数据的时候,返回该记录的id<insert id="insert"
主要介绍了mybatis xml中特殊字符处理及mybatis特殊符号处理技巧,mybatis特殊符号处理给大家介绍了两种写法,感兴趣的朋友一起看看吧
特殊字符(\,_,%)转义工具类 MyQueryInterceptor.java: Mybatis自定义拦截器 注意:该拦截器只支持QueryWrapper的like方法,serviceImpl层传全角模糊查询(%%) mapper或xml层的全角模糊查询(%*%)和半角模糊查询(%*或*%)
主要介绍了MyBatis传入集合 list 数组 map参数的写法的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
今天小编就为大家分享一篇关于mybatis动态sql之Map参数的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
主要介绍了mybatis使用char类型字段查询oracle数据库时结果返回null问题的解决方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
Springboot中mybatis表关联映射关系(一对一)
mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例...
主要介绍了 Mybatis返回插入主键id的方法,在文章底部给大家补充了Mybatis中insert中返回主键ID的方法,非常不错,需要的朋友可以参考下