我们知道@Param在参数中使用,在mapper文件就能使用@Param里的参数名称对应相对的参数名称,并且是多个参数
举个例子
这是dao层的接口方法
使用param
//展示商品列表
List<Product> queryProductList(@Param("productCondition")Product productCondition,
@Param("rowIndex")int rowIndex,@Param("pageSize")int pageSize);//返回一个project集合
有了这样我们就可以去mapper里操作
我们看一个mapper语句
<!-- 根据shopId 查询-->
<if test="productCondition.shop != null and productCondition.shop.shopId != null ">
and shop_id = #{productCondition.shop.shopId}
</if>
这里的productCondition类型是一个复合类型里面村有一个shop的属性
我们要使用的话必须是@para参数里的名称.复合类型里的参数名称(productCondition.shop)
但是当我们不去使用param的时候如下
//展示商品列表
List<Product> queryProductList(Product productCondition,);//返回一个project集合(这里一个参数是因为多个参数的话就需要用param,这里我们不讨论这个性质)
mapper文件里
<!-- 根据shopId 查询-->
<if test="productCondition.shop != null and productCondition.shop.shopId != null ">
and shop_id = #{productCondition.shop.shopId}
</if>
结果是报错,无法找到这个Product.productCondition的属性,不用param必须这么写:
必须直接写复合类型的属性
<!-- 根据shopId 查询-->
<if test="shop != null and shop.shopId != null ">
and shop_id = #{shop.shopId}
</if>
并且我发现如果使用了param时必须要像下面这样写
<!-- 根据shopId 查询-->
<if test="productCondition.shop != null and productCondition.shop.shopId != null ">
and shop_id = #{productCondition.shop.shopId}
</if>
这种写法才可以
如果照下面这样写也会报错。
<!-- 根据shopId 查询-->
<if test="shop != null and shop.shopId != null ">
and shop_id = #{shop.shopId}
</if>