mybatis

mybatis联合查询多参数实现方式

2015-11-17  本文已影响1294人  lothar_cly

平时使用mybatis都不怎么自己写这些SQL配置文件的一些东西,除了一些比较特殊的需要实现时才会去自己写sql。

今天遇到了一个关于mybatis的问题,就是在使用联合查询时 需要传入多个参数。具体的例子来了:

public interface ShopCategoryyMapper{
    public List<PaShopCategoryDTO> queryShopCategoryCommodityByShopId(int shopid);
}

DAO接口就是这个问题,但是这个查询的需求不是命名的意思,其实还有中间的含义,要获取店铺分类,然后按分类得到商品。所以需求分解就是,通过店铺的ID获取到店铺分类,然后通过获取的分类 在去获取对应店铺分类的下的商品数据。相关的表包括 commodityshop_categoryshop_category_commodity

第一步

    <select id="queryShopCategoryCommodityByShopId" parameterType="java.lang.Integer"           resultMap="QueryLastBaseResultMap">
        SELECT * FROM shop_category  WHERE SHOP_ID = #{shopid} 
    </select>

第二步

 <resultMap id="QueryLastBaseResultMap" type="PaShopCategoryDTO">
    <id column="ID" jdbcType="INTEGER" property="id"/>
    <id column="SHOP_ID" jdbcType="INTEGER" property="shopId"/>
    <association property="commodities" column="{id=ID,shopid=SHOP_ID}" select="QueryCommodity"/>
</resultMap>

重点就在association 中,association本身表示就是联合查询,column表示的就是哪一行作为参数。{id=ID,shopid=SHOP_ID}的意思就是把这个作为一个Map参数传入。select表示的是调用哪个查询 ID对应即可。

第三步

<select id="QueryCommodity" parameterType="java.util.Map" resultMap="BaseResultCommodityMap"></select>

SQL不是重点,select 中的ID 对应上,重点在parameterType,里面使用的是map。这说明我们在column中的参数 当做了Map。这样在下面的SQL中我们就可以使用 #{key}来传入参数。 over!

上一篇 下一篇

猜你喜欢

热点阅读