ssm 项目遇到mapper 里循环两次取参数的问题

来源:互联网 发布:js设置按钮隐藏 编辑:程序博客网 时间:2024/05/29 07:16

需求。做一个商品搜索的接口,要求按照条件搜索商品,参数以一个集合的形式取的,

@ApiModel("Param")
public class Param {
@ApiModelProperty("属性id")
private Integer id;
@ApiModelProperty("//最大值")
private Integer maxValId;
@ApiModelProperty("//最小值")
private Integer minValId;
@ApiModelProperty("字符串取值集合")
private List<String> valId;
@ApiModelProperty("最小价格取值")
private Integer minPic;
@ApiModelProperty("最大价格取值")
private Integer maxPic;


@ApiModel("ListParam")
public class ListParam {
@ApiModelProperty("属性。参数取值集合")
private List<Param> paramList;
@ApiModelProperty("第几页")
private Integer pageNum;
@ApiModelProperty("分页数,一页显示几条")
private Integer pageSize;
@ApiModelProperty("搜索框内容")
private String content;
@ApiModelProperty("按销量排序")
private String saleSort;
@ApiModelProperty("按新品排序1、降序。0升序")
private String newSort;
@ApiModelProperty("按价格排序1、降序。0升序")
private String priceSort;
@ApiModelProperty("类型id")
private int type;


对应的mapper。xml

<select id="getSearchQuery" parameterType="com.jnzx.zbjy.filter.ListParam"
resultType="com.jnzx.zbjy.entity.Product">
SELECT DISTINCT product.* FROM product LEFT JOIN pro_detail on product.id=pro_detail.product_id
<where>
product.type_id = #{type} and product.is_shopping='1'
<if test="paramList!=null and paramList.size>0 ">
<foreach collection="paramList" item="item" index="index">
<if test=" item.id==1">
AND
pro_detail.attribute_id1=#{item.id}
AND
( SELECT pro_attribute_value.attribute_value FROM pro_attribute_value WHERE
pro_attribute_value.id=pro_detail.attribute_value_id1)
BETWEEN (SELECT pro_attribute_scope.attribute_scope FROM pro_attribute_scope where
pro_attribute_scope.id=#{item.minValId}) AND
(SELECT pro_attribute_scope.attribute_scope FROM pro_attribute_scope WHERE
pro_attribute_scope.id=#{item.maxValId})
</if>
<if test="item.id==2">
AND
pro_detail.attribute_id2=#{item.id} -- 查询指圈是否是搜索中的条件
AND
( SELECT pro_attribute_value.attribute_value FROM pro_attribute_value WHERE
pro_attribute_value.id=pro_detail.attribute_value_id2) -- pro_detail.attribute_value_id2
-- 对应的是指圈属性对应的值
BETWEEN (SELECT pro_attribute_scope.attribute_scope FROM pro_attribute_scope where
pro_attribute_scope.id=#{item.minValId})
AND
(SELECT pro_attribute_scope.attribute_scope FROM pro_attribute_scope WHERE
pro_attribute_scope.id=#{item.maxValId})
</if>
<if test="item.id==7">
AND
product.price BETWEEN #{item.minPic} AND #{item.maxPic}
</if>
<if test="item.id==3">
AND
-- 查询品牌是否是搜索中的品牌
product.brand in(SELECT pro_attribute_scope.attribute_scope FROM pro_attribute_scope WHERE
pro_attribute_scope.id in
<foreach collection="item.ValId" item="val" index="index" open="(" close=")" separator=",">
#{val}
</foreach>
)
</if>
<if test="item.id==4">
AND
pro_detail.arg_id3=#{item.id} -- 查询工艺/镶嵌类型是否是搜索中的值
and
(SELECT pro_attribute_value.attribute_value FROM pro_attribute_value where
pro_attribute_value.id=pro_detail.arg_val_id3) in(SELECT pro_attribute_scope.attribute_scope
FROM
pro_attribute_scope WHERE
pro_attribute_scope.id in
<foreach collection="item.ValId" item="val" index="index" open="(" close=")" separator=",">
#{val}
</foreach>
)
</if>
<if test="item.id==5">
AND
pro_detail.arg_id4=#{item.id} -- 查询戒臂类型是否是搜索中的值
AND
(SELECT pro_attribute_value.attribute_value FROM pro_attribute_value where
pro_attribute_value.id=pro_detail.arg_val_id4) in(SELECT pro_attribute_scope.attribute_scope
FROM
pro_attribute_scope WHERE
pro_attribute_scope.id in
<foreach collection="item.ValId" item="val" index="index" open="(" close=")" separator=",">
#{val}
</foreach>
)
</if>
<if test="item.id==6">
AND
pro_detail.arg_id2=#{item.id} -- 判断是否有辅石 0或数字
<if test="item.valId !=null">
<foreach collection="item.valId" index="index" item="shi">
<if test="shi==7">
and -- 没有辅石的情况
(SELECT pro_attribute_value.attribute_value FROM pro_attribute_value where
pro_attribute_value.id=pro_detail.arg_val_id2)=0
</if>
<if test="shi==8">
AND -- 有副石的情况
(SELECT pro_attribute_value.attribute_value FROM pro_attribute_value where
pro_attribute_value.id=pro_detail.arg_val_id2) >0
</if>
</foreach>
</if>
</if>
</foreach>
</if>
<if test="content !=null and content !=''">
AND product.NAME LIKE '%${content}%'
</if>
<if test="priceSort !=null or saleSort !=null or newSort!=null">
<if test="priceSort==1">
ORDER BY
product.price DESC
</if>
<if test="priceSort==0">
ORDER BY
product.price ASC
</if>
<if test="saleSort==1 ">
ORDER BY
product.sales DESC
</if>
<if test="saleSort==0">
ORDER BY
p.sales ASC
</if>
<if test="newSort==1">
ORDER BY
product.create_date DESC
</if>
<if test="newSort==0">
ORDER BY
product.create_date ASC
</if>

</if>
</where>
</select> <select id="getSearchQuery" parameterType="com.jnzx.zbjy.filter.ListParam"
resultType="com.jnzx.zbjy.entity.Product">
SELECT DISTINCT product.* FROM product LEFT JOIN pro_detail on product.id=pro_detail.product_id
<where>
product.type_id = #{type} and product.is_shopping='1'
<if test="paramList!=null and paramList.size>0 ">
<foreach collection="paramList" item="item" index="index">
<if test=" item.id==1">
AND
pro_detail.attribute_id1=#{item.id}
AND
( SELECT pro_attribute_value.attribute_value FROM pro_attribute_value WHERE
pro_attribute_value.id=pro_detail.attribute_value_id1)
BETWEEN (SELECT pro_attribute_scope.attribute_scope FROM pro_attribute_scope where
pro_attribute_scope.id=#{item.minValId}) AND
(SELECT pro_attribute_scope.attribute_scope FROM pro_attribute_scope WHERE
pro_attribute_scope.id=#{item.maxValId})
</if>
<if test="item.id==2">
AND
pro_detail.attribute_id2=#{item.id} -- 查询指圈是否是搜索中的条件
AND
( SELECT pro_attribute_value.attribute_value FROM pro_attribute_value WHERE
pro_attribute_value.id=pro_detail.attribute_value_id2) -- pro_detail.attribute_value_id2
-- 对应的是指圈属性对应的值
BETWEEN (SELECT pro_attribute_scope.attribute_scope FROM pro_attribute_scope where
pro_attribute_scope.id=#{item.minValId})
AND
(SELECT pro_attribute_scope.attribute_scope FROM pro_attribute_scope WHERE
pro_attribute_scope.id=#{item.maxValId})
</if>
<if test="item.id==7">
AND
product.price BETWEEN #{item.minPic} AND #{item.maxPic}
</if>
<if test="item.id==3">
AND
-- 查询品牌是否是搜索中的品牌
product.brand in(SELECT pro_attribute_scope.attribute_scope FROM pro_attribute_scope WHERE
pro_attribute_scope.id in
<foreach collection="item.ValId" item="val" index="index" open="(" close=")" separator=",">
#{val}
</foreach>
)
</if>
<if test="item.id==4">
AND
pro_detail.arg_id3=#{item.id} -- 查询工艺/镶嵌类型是否是搜索中的值
and
(SELECT pro_attribute_value.attribute_value FROM pro_attribute_value where
pro_attribute_value.id=pro_detail.arg_val_id3) in(SELECT pro_attribute_scope.attribute_scope
FROM
pro_attribute_scope WHERE
pro_attribute_scope.id in
<foreach collection="item.ValId" item="val" index="index" open="(" close=")" separator=",">
#{val}
</foreach>
)
</if>
<if test="item.id==5">
AND
pro_detail.arg_id4=#{item.id} -- 查询戒臂类型是否是搜索中的值
AND
(SELECT pro_attribute_value.attribute_value FROM pro_attribute_value where
pro_attribute_value.id=pro_detail.arg_val_id4) in(SELECT pro_attribute_scope.attribute_scope
FROM
pro_attribute_scope WHERE
pro_attribute_scope.id in
<foreach collection="item.ValId" item="val" index="index" open="(" close=")" separator=",">
#{val}
</foreach>
)
</if>
<if test="item.id==6">
AND
pro_detail.arg_id2=#{item.id} -- 判断是否有辅石 0或数字
<if test="item.valId !=null">
<foreach collection="item.valId" index="index" item="shi">
<if test="shi==7">
and -- 没有辅石的情况
(SELECT pro_attribute_value.attribute_value FROM pro_attribute_value where
pro_attribute_value.id=pro_detail.arg_val_id2)=0
</if>
<if test="shi==8">
AND -- 有副石的情况
(SELECT pro_attribute_value.attribute_value FROM pro_attribute_value where
pro_attribute_value.id=pro_detail.arg_val_id2) >0
</if>
</foreach>
</if>
</if>
</foreach>
</if>
<if test="content !=null and content !=''">
AND product.NAME LIKE '%${content}%'
</if>
<if test="priceSort !=null or saleSort !=null or newSort!=null">
<if test="priceSort==1">
ORDER BY
product.price DESC
</if>
<if test="priceSort==0">
ORDER BY
product.price ASC
</if>
<if test="saleSort==1 ">
ORDER BY
product.sales DESC
</if>
<if test="saleSort==0">
ORDER BY
p.sales ASC
</if>
<if test="newSort==1">
ORDER BY
product.create_date DESC
</if>
<if test="newSort==0">
ORDER BY
product.create_date ASC
</if>

</if>
</where>
</select>


原创粉丝点击