本篇内容介绍了“mybatis返回map结果及@MapKey使用的场景实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
select的 resultType属性为map时:
通过MapKey指定map的key值
@MapKey("id") Map<Long, UserInfo> getUserInfoMap();
@MapKey("id") Map<Long, Map<String,Object>> getUserValueMap();
@MapKey("name") Map<name, UserInfo> getUserInfoMap(); ..............返回一条记录............... Map<String, Object> getUserInfoMapById();
背景:今天使用MyBatis查询一些记录,数据涉及到两个表里的数据,需要连表查询,但我MyBatis的返回结果不想创建新的DO对象,因此使用@MapKey注解返回一个Map集合。
含义:@MapKey注解用于mapper.xml文件中,一般用于查询多条记录中各个字段的结果,存储在Map中。Map结构的示例如下:Map<Long, Map<String, String>>。范型类型可以修改。
Map的key:一般存储每条记录的主键,也可以用其他值表示,主要取决于Dao层@MapKey注解后面的字段(如@MapKey("id"));
Map的value:也是一个Map,表示查询出这条记录的每个字段的字段名称和字段值。
1. mapper.xml文件
<select id="getInfoById" resultType="java.util.Map"> select ext.id as id, info.produce_area as area, ext.attribute_value as companyName from product_info info left join product_ext ext on info.id=ext.id where info.id=#{id} and ext.attribute_name=#{name} </select>
2. dao.java
@MapKey("id") Map<Long,Map<String,String>> getInfoById(@Param("id") Long id, @Param("name") String name);
3. manager.java
// 查询,返回结果:{1={area:上海,companyName=西西公司}} // 如果是多条记录,返回结果如:{1={area:上海,companyName:西西公司},2={area:南京,compantyName:猴猴公司}} Map<Long, Map<String, String>> map = productDao.getInfoById(id, "公司名称"); if(map==null || map.isEmpty() || !map.containsKey(id)){ return null; } // 获取结果 String area = produceInfoMap.get(id).get("area"); String companyName = produceInfoMap.get(productTracInfoId).get("companyName");
“mybatis返回map结果及@MapKey使用的场景实例分析”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。