平時(shí)使用mybatis都不怎么自己寫這些SQL配置文件的一些東西,除了一些比較特殊的需要實(shí)現(xiàn)時(shí)才會(huì)去自己寫sql。
今天遇到了一個(gè)關(guān)于mybatis的問(wèn)題,就是在使用聯(lián)合查詢時(shí) 需要傳入多個(gè)參數(shù)。具體的例子來(lái)了:
public interface ShopCategoryyMapper{
public List<PaShopCategoryDTO> queryShopCategoryCommodityByShopId(int shopid);
}
DAO接口就是這個(gè)問(wèn)題,但是這個(gè)查詢的需求不是命名的意思,其實(shí)還有中間的含義,要獲取店鋪分類,然后按分類得到商品。所以需求分解就是,通過(guò)店鋪的ID獲取到店鋪分類,然后通過(guò)獲取的分類 在去獲取對(duì)應(yīng)店鋪分類的下的商品數(shù)據(jù)。相關(guān)的表包括 commodity,shop_category,shop_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>
重點(diǎn)就在association 中,association本身表示就是聯(lián)合查詢,column表示的就是哪一行作為參數(shù)。{id=ID,shopid=SHOP_ID}的意思就是把這個(gè)作為一個(gè)Map參數(shù)傳入。select表示的是調(diào)用哪個(gè)查詢 ID對(duì)應(yīng)即可。
第三步
<select id="QueryCommodity" parameterType="java.util.Map" resultMap="BaseResultCommodityMap"></select>
SQL不是重點(diǎn),select 中的ID 對(duì)應(yīng)上,重點(diǎn)在parameterType,里面使用的是map。這說(shuō)明我們?cè)?code>column中的參數(shù) 當(dāng)做了Map。這樣在下面的SQL中我們就可以使用 #{key}來(lái)傳入?yún)?shù)。 over!