别往下看了 学了半天重复造轮子 mybatis早帮你写好了 想哭
@MapKey("实体类中某一属性的名字")
https://blog.csdn.net/u012734441/article/details/85861337#commentBox
数据库中 一个主键 对应一条数据
如果把 主键作为key ,其余数据封装后作为value 放入map中,那查询的效率和方便程度将会极大提高
效果:
pajo实体类:
mapper.xml 动态sql语句
<mapper namespace="com.cxp.shop_commodity.mapper.CommodityIdToOrderMapper">
<select id="selCommodityIdAndToOrder" resultType="com.cxp.shop_api.dto.CommodityIdAndToOrder">
select commodity_id ,
store_id `commodityToOrder.storeID`,
commodity_price `commodityToOrder.commodityPrice` ,
commodity_stock `commodityToOrder.commodityStock`
from commodity
where commodity_id in
<foreach collection="list" item="item" separator="," open="(" close=")">
#{item.commodityId}
</foreach>
</select>
</mapper>
拦截器: 对原本的sql返回结果进行拦截 改造数据放入map
public class ResultHandler implements org.apache.ibatis.session.ResultHandler {
private final Map<Integer,CommodityToOrder> CommodityIdToOrderMap = new HashMap<>();
public Map<Integer,CommodityToOrder> getCommodityIdToOrderMap(){
return this.CommodityIdToOrderMap;
}
//对返回数据拦截 改造
@Override
public void handleResult(ResultContext resultContext) {
//获取原本返回的数据对象
CommodityIdAndToOrder resultObject = (CommodityIdAndToOrder)resultContext.getResultObject();
CommodityIdToOrderMap.put(resultObject.getCommodityId(),resultObject.getCommodityToOrder());
}
}
mapper java对象: 供service层调用
@Repository
public class CommodityIdToOrderMapper extends SqlSessionDaoSupport {
@SuppressWarnings("rawtypes")
@Resource
public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory){
super.setSqlSessionFactory(sqlSessionFactory);
}
//service层调用的方法
@SuppressWarnings("rawtypes")
public Map<Integer, CommodityToOrder> getCommodityIdToOrderMap(List<Integer> CommodityIdList){
ResultHandler resultHandler = new ResultHandler();
//namespace : XxxMapper.xml 中配置的地址(XxxMapper.xml的qualified name)
//.selectXxxxNum : XxxMapper.xml 中配置的方法名称
//this.getSqlSession().select(namespace+".selectXxxxNum", handler);
//resultHandler作为输出参数传进去
this.getSqlSession().select("com.cxp.shop_commodity.mapper.CommodityIdToOrderMapper.selCommodityIdAndToOrder",
CommodityIdList,resultHandler);
return resultHandler.getCommodityIdToOrderMap();
}
}
做出这效果离不开2位大佬文章的参考
https://blog.csdn.net/jlh912008548/article/details/62884627
https://blog.csdn.net/sou_liu/article/details/47755635#commentBox