相信很多使用Mybatis的人都经常使用数据库查询批量数据,然后通过ORM映射到内存当中,一般情况下,Mybatis通过List形式来返回数据,但是有些特殊场景,大家希望返回来的集合通过主键的方式来映射到一个特定HashMap当中,通过研究,我发现通过如下当时可以达到映射效益:
DAO层对象:
package ems.rm.margindataproxy;
import java.util.HashMap;
import org.apache.ibatis.annotations.MapKey;
import ems.rm.margindataproxy.MarginData;
public interface DataMapper {
@MapKey("Stock_Code")
HashMap<String,MarginData> getAllMarginData();
}
Mapper.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="ems.rm.margindataproxy.DataMapper" >
<resultMap id="marginDataList" type="ems.rm.margindataproxy.MarginData">
<result column="Stock_Code" property="Stock_Code" jdbcType="VARCHAR"/>
<result column="Margin_Ratio" property="Margin_Ratio" jdbcType="FLOAT"/>
<!-->result column="Margin_Level" property="Margin_Level" jdbcType="FLOAT"/ -->
</resultMap >
<select id="getAllMarginData" resultMap="marginDataList">
select distinct a.stock_code, a.margin_ratio from hs_secuhk.marginratio a inner join hs_secuhk.nstkcode b on(a.STOCK_CODE =b.STOCK_CODE and b.Margin_Flag='Y' and a.EXCHANGE_TYPE ='K')
</select>
</mapper>
其实注解@MapKey("主键")即可以轻松的完成Map对象的映射。