需求场景:
批量从数据库查出若干条数据,包括id和name两个字段。希望可以把结果直接用Map接收,然后通过map.get(id)方便地获取name的值。
然后,在这个Mappper的方法上面加一个注解:
/**
* 根据多个id批量获取名称
* @param list 包含有Map key="id"的list
* @return
*/
@MapKey("id")
public Map<Integer, Map<String, 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>
上述是基于Mapper.xml文件的返回Map形式。
注解返回的Map形式:
@Select("select id,code,name from test where code =#{test} ")
@MapKey("id")
Map<Long,Test> query(@Param("test")String test)
注意:返回的列不能用Results注解值,否则Mybatis是识别不了这个,也可以使用select * from ....之类的,用Map<Long,Map<Object,Object>>接收。