mybatis联合查询多参数实现方式
2015-11-17 本文已影响1294人
lothar_cly
平时使用mybatis都不怎么自己写这些SQL配置文件的一些东西,除了一些比较特殊的需要实现时才会去自己写sql。
今天遇到了一个关于mybatis的问题,就是在使用联合查询时 需要传入多个参数。具体的例子来了:
public interface ShopCategoryyMapper{
public List<PaShopCategoryDTO> queryShopCategoryCommodityByShopId(int shopid);
}
DAO接口就是这个问题,但是这个查询的需求不是命名的意思,其实还有中间的含义,要获取店铺分类,然后按分类得到商品。所以需求分解就是,通过店铺的ID获取到店铺分类,然后通过获取的分类 在去获取对应店铺分类的下的商品数据。相关的表包括 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>
重点就在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!