Mybatis中注解@MapKey的使用详解
mybatis的原身是ibatis,现在已经脱离了apache基金会,新官网是http://www.mybatis.org/。 在研究Mybatis源码之前并不知道这个注解的妙用的,但是当我看到参数解析的时候 有这个一个注解,所以我了解了一下,当我们返回像Map<String,Map<String,Object>>这种类型的时候,我们往往很难做到,因为这里面可能是多个表的数据,所以我们不可能再建一个模型。 这时候我们就可以使用这个注解了 @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface MapKey { String value(); } 很明显,这个注解是作用在方法上面的,具体的用法就是设置外面Map的KEY是什么。这样我们就能够查询出非常复杂的结果,而不用在建立一个新的实体. PS:下面看下MyBatis使用@MapKey注解接收多个查询记录到Map中,以便方便地用get()方法获取字段的值 需求场景: 批量从数据库查出若干条数据,包括id和name两个字段。希望可以把结果直接用Map接收,然后通过map.get(id)方便地获取name的值。 问题: 如果使用下面的代码,则如果查询结果是多条就会报错,因为MyBatis是把结果以("id":123)、("name":"Jack")的形式保存在Map中的。所以如果返回结果一条包括了id和name的记录就没问题;如果返回多条记录,即有多个("id":123)、("id":124),则MyBatis就傻掉不知如何处理了。 Map<String,Object> m = abcDao.getNamesByIds(idList); 解决的方法是在外面再用一个Map: Map<Integer,Object>> m = abcDao.getNamesByIds(idList); 然后,在这个dao的方法上面加一个注解: <span style="white-space:pre"> </span>/** <span style="white-space:pre"> </span> * 根据多个id批量获取名称 <span style="white-space:pre"> </span> * @param list 包含有Map key="id"的list <span style="white-space:pre"> </span> * @return <span style="white-space:pre"> </span> */ <span style="white-space:pre"> </span>@MapKey("id") <span style="white-space:pre"> </span>public Map<Integer,Object>> getNamesByIds(List<Map<String,Object>> list); 这个注解表示最外层Map的key为查询结果中字段名为“id”的值。 Mapper.xml中的配置如下: <select id="getNamesByIds" resultType="java.util.Map"> SELECT id,name FROM tb_abc WHERE id IN <foreach item="item" collection="list" open="(" separator="," close=")"> #{item.id} </foreach> </select> 以上所述是小编给大家介绍的Mybatis中注解@MapKey的使用详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程小技巧网站的支持! 您可能感兴趣的文章:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- java – findViewById()返回无法找到符号,但ID是否在布局中
- java – 如何从我的Jframe按钮调用中访问main中的LinkedLis
- java – 检查Eclipse调试器中的当前异常?
- 我的应用程序的java.lang.ClassNotFoundException
- java多线程编程之管道通信详解
- java – 我更喜欢哪种模式?
- 最近看了关于java的几条帖子,写的不错,总结了一下
- java – DirContext:Active Directory Ldap请求:获取具有
- Character.UnicodeBlock中cjk的说明详解
- java – 在日期 – 时间字符串中解析日期的顺序指示符(st,n