mybatis 拦截器实现 select返回值为map,选取表主键的作为key 其他属性封装为value

 

别往下看了 学了半天重复造轮子 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值