<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "mybatis-3-mapper.dtd">
<mapper namespace="com.mortals.xhx.module.product.dao.ibatis.ProductDaoImpl">

    <!-- 字段和属性映射 -->
    <resultMap type="ProductEntity" id="ProductEntity-Map">
        <id  property="id" column="id" />
        <result property="productName" column="productName" />
        <result property="productCode" column="productCode" />
        <result property="productSlogan" column="productSlogan" />
        <result property="productLogoPath" column="productLogoPath" />
        <result property="productFacePath" column="productFacePath" />
        <result property="productVideoPath" column="productVideoPath" />
        <result property="productPicPath" column="productPicPath" />
        <result property="productIntroduction" column="productIntroduction" />
        <result property="productDetail" column="productDetail" />
        <result property="publishTime" column="publishTime" />
        <result property="hot" column="hot" />
        <result property="productRemark" column="productRemark" />
        <result property="createUserId" column="createUserId" />
        <result property="createTime" column="createTime" />
        <result property="updateUserId" column="updateUserId" />
        <result property="updateTime" column="updateTime" />
        <result property="shelves" column="shelves" />
    </resultMap>

    <!-- 表所有列 -->
    <sql id="_columns">
        <trim suffixOverrides="," suffix="">
            <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('id') or colPickMode == 1 and data.containsKey('id')))">
                a.id,
            </if>
            <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('productName') or colPickMode == 1 and data.containsKey('productName')))">
                a.productName,
            </if>
            <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('productCode') or colPickMode == 1 and data.containsKey('productCode')))">
                a.productCode,
            </if>
            <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('productSlogan') or colPickMode == 1 and data.containsKey('productSlogan')))">
                a.productSlogan,
            </if>
            <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('productLogoPath') or colPickMode == 1 and data.containsKey('productLogoPath')))">
                a.productLogoPath,
            </if>
            <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('productFacePath') or colPickMode == 1 and data.containsKey('productFacePath')))">
                a.productFacePath,
            </if>
            <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('productVideoPath') or colPickMode == 1 and data.containsKey('productVideoPath')))">
                a.productVideoPath,
            </if>
            <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('productPicPath') or colPickMode == 1 and data.containsKey('productPicPath')))">
                a.productPicPath,
            </if>
            <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('productIntroduction') or colPickMode == 1 and data.containsKey('productIntroduction')))">
                a.productIntroduction,
            </if>
            <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('productDetail') or colPickMode == 1 and data.containsKey('productDetail')))">
                a.productDetail,
            </if>
            <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('publishTime') or colPickMode == 1 and data.containsKey('publishTime')))">
                a.publishTime,
            </if>
            <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('hot') or colPickMode == 1 and data.containsKey('hot')))">
                a.hot,
            </if>
            <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('productRemark') or colPickMode == 1 and data.containsKey('productRemark')))">
                a.productRemark,
            </if>
            <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('createUserId') or colPickMode == 1 and data.containsKey('createUserId')))">
                a.createUserId,
            </if>
            <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('createTime') or colPickMode == 1 and data.containsKey('createTime')))">
                a.createTime,
            </if>
            <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('updateUserId') or colPickMode == 1 and data.containsKey('updateUserId')))">
                a.updateUserId,
            </if>
            <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('updateTime') or colPickMode == 1 and data.containsKey('updateTime')))">
                a.updateTime,
            </if>
            <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('shelves') or colPickMode == 1 and data.containsKey('shelves')))">
                a.shelves,
            </if>
        </trim>
    </sql>
    <!-- 子表所有列 -->
    <sql id="_columns_sub">
        <trim suffixOverrides="," suffix="">
            b.id,b.productId,b.productName,b.question,b.answer,b.createTime,b.createUserId,b.updateTime,
        </trim>
    </sql>
    <!-- 新增 区分主键自增加还是业务插入 -->
    <insert id="insert" parameterType="ProductEntity"  useGeneratedKeys="true" keyProperty="id">
        insert into mortals_xhx_product
        (productName,productCode,productSlogan,productLogoPath,productFacePath,productVideoPath,productPicPath,productIntroduction,productDetail,publishTime,hot,productRemark,createUserId,createTime,updateUserId,updateTime,shelves)
        VALUES
        (#{productName},#{productCode},#{productSlogan},#{productLogoPath},#{productFacePath},#{productVideoPath},#{productPicPath},#{productIntroduction},#{productDetail},#{publishTime},#{hot},#{productRemark},#{createUserId},#{createTime},#{updateUserId},#{updateTime},#{shelves})
    </insert>

    <!-- 批量新增 -->
    <insert id="insertBatch" parameterType="paramDto">
        insert into mortals_xhx_product
        (productName,productCode,productSlogan,productLogoPath,productFacePath,productVideoPath,productPicPath,productIntroduction,productDetail,publishTime,hot,productRemark,createUserId,createTime,updateUserId,updateTime,shelves)
        VALUES
        <foreach collection="data.dataList" item="item" index="index" separator="," >
            (#{item.productName},#{item.productCode},#{item.productSlogan},#{item.productLogoPath},#{item.productFacePath},#{item.productVideoPath},#{item.productPicPath},#{item.productIntroduction},#{item.productDetail},#{item.publishTime},#{item.hot},#{item.productRemark},#{item.createUserId},#{item.createTime},#{item.updateUserId},#{item.updateTime},#{item.shelves})
        </foreach>
    </insert>


    <!-- 根据ParamDto更新 -->
    <update id="update" parameterType="paramDto">
        update mortals_xhx_product as a
        set
        <trim suffixOverrides="," suffix="">
            <if test="(colPickMode==0 and data.containsKey('productName')) or (colPickMode==1 and !data.containsKey('productName'))">
                a.productName=#{data.productName},
            </if>
            <if test="(colPickMode==0 and data.containsKey('productCode')) or (colPickMode==1 and !data.containsKey('productCode'))">
                a.productCode=#{data.productCode},
            </if>
            <if test="(colPickMode==0 and data.containsKey('productSlogan')) or (colPickMode==1 and !data.containsKey('productSlogan'))">
                a.productSlogan=#{data.productSlogan},
            </if>
            <if test="(colPickMode==0 and data.containsKey('productLogoPath')) or (colPickMode==1 and !data.containsKey('productLogoPath'))">
                a.productLogoPath=#{data.productLogoPath},
            </if>
            <if test="(colPickMode==0 and data.containsKey('productFacePath')) or (colPickMode==1 and !data.containsKey('productFacePath'))">
                a.productFacePath=#{data.productFacePath},
            </if>
            <if test="(colPickMode==0 and data.containsKey('productVideoPath')) or (colPickMode==1 and !data.containsKey('productVideoPath'))">
                a.productVideoPath=#{data.productVideoPath},
            </if>
            <if test="(colPickMode==0 and data.containsKey('productPicPath')) or (colPickMode==1 and !data.containsKey('productPicPath'))">
                a.productPicPath=#{data.productPicPath},
            </if>
            <if test="(colPickMode==0 and data.containsKey('productIntroduction')) or (colPickMode==1 and !data.containsKey('productIntroduction'))">
                a.productIntroduction=#{data.productIntroduction},
            </if>
            <if test="(colPickMode==0 and data.containsKey('productDetail')) or (colPickMode==1 and !data.containsKey('productDetail'))">
                a.productDetail=#{data.productDetail},
            </if>
            <if test="(colPickMode==0 and data.containsKey('publishTime')) or (colPickMode==1 and !data.containsKey('publishTime'))">
                a.publishTime=#{data.publishTime},
            </if>
            <if test="(colPickMode==0 and data.containsKey('hot')) or (colPickMode==1 and !data.containsKey('hot'))">
                a.hot=#{data.hot},
            </if>
            <if test="(colPickMode==0 and data.containsKey('hotIncrement')) or (colPickMode==1 and !data.containsKey('hotIncrement'))">
                a.hot=ifnull(a.hot,0) + #{data.hotIncrement},
            </if>
            <if test="(colPickMode==0 and data.containsKey('productRemark')) or (colPickMode==1 and !data.containsKey('productRemark'))">
                a.productRemark=#{data.productRemark},
            </if>
            <if test="(colPickMode==0 and data.containsKey('createUserId')) or (colPickMode==1 and !data.containsKey('createUserId'))">
                a.createUserId=#{data.createUserId},
            </if>
            <if test="(colPickMode==0 and data.containsKey('createUserIdIncrement')) or (colPickMode==1 and !data.containsKey('createUserIdIncrement'))">
                a.createUserId=ifnull(a.createUserId,0) + #{data.createUserIdIncrement},
            </if>
            <if test="(colPickMode==0 and data.containsKey('createTime')) or (colPickMode==1 and !data.containsKey('createTime'))">
                a.createTime=#{data.createTime},
            </if>
            <if test="(colPickMode==0 and data.containsKey('updateUserId')) or (colPickMode==1 and !data.containsKey('updateUserId'))">
                a.updateUserId=#{data.updateUserId},
            </if>
            <if test="(colPickMode==0 and data.containsKey('updateUserIdIncrement')) or (colPickMode==1 and !data.containsKey('updateUserIdIncrement'))">
                a.updateUserId=ifnull(a.updateUserId,0) + #{data.updateUserIdIncrement},
            </if>
            <if test="(colPickMode==0 and data.containsKey('updateTime')) or (colPickMode==1 and !data.containsKey('updateTime'))">
                a.updateTime=#{data.updateTime},
            </if>
            <if test="(colPickMode==0 and data.containsKey('shelves')) or (colPickMode==1 and !data.containsKey('shelves'))">
                a.shelves=#{data.shelves},
            </if>
            <if test="(colPickMode==0 and data.containsKey('shelvesIncrement')) or (colPickMode==1 and !data.containsKey('shelvesIncrement'))">
                a.shelves=ifnull(a.shelves,0) + #{data.shelvesIncrement},
            </if>
        </trim>
        <trim suffixOverrides="where" suffix="">
            where
            <trim prefixOverrides="and" prefix="">
                <include refid="_condition_"/>
            </trim>
        </trim>
    </update>
    <!-- 批量更新 -->
    <update id="updateBatch" parameterType="paramDto">
        update mortals_xhx_product as a
        <trim prefix="set" suffixOverrides=",">
            <trim prefix="productName=(case" suffix="ELSE productName end),">
                <foreach collection="data.dataList" item="item" index="index" separator="" >
                    <if test="(colPickMode==0 and item.containsKey('productName')) or (colPickMode==1 and !item.containsKey('productName'))">
                        when a.id=#{item.id} then #{item.productName}
                    </if>
                </foreach>
            </trim>
            <trim prefix="productCode=(case" suffix="ELSE productCode end),">
                <foreach collection="data.dataList" item="item" index="index" separator="" >
                    <if test="(colPickMode==0 and item.containsKey('productCode')) or (colPickMode==1 and !item.containsKey('productCode'))">
                        when a.id=#{item.id} then #{item.productCode}
                    </if>
                </foreach>
            </trim>
            <trim prefix="productSlogan=(case" suffix="ELSE productSlogan end),">
                <foreach collection="data.dataList" item="item" index="index" separator="" >
                    <if test="(colPickMode==0 and item.containsKey('productSlogan')) or (colPickMode==1 and !item.containsKey('productSlogan'))">
                        when a.id=#{item.id} then #{item.productSlogan}
                    </if>
                </foreach>
            </trim>
            <trim prefix="productLogoPath=(case" suffix="ELSE productLogoPath end),">
                <foreach collection="data.dataList" item="item" index="index" separator="" >
                    <if test="(colPickMode==0 and item.containsKey('productLogoPath')) or (colPickMode==1 and !item.containsKey('productLogoPath'))">
                        when a.id=#{item.id} then #{item.productLogoPath}
                    </if>
                </foreach>
            </trim>
            <trim prefix="productFacePath=(case" suffix="ELSE productFacePath end),">
                <foreach collection="data.dataList" item="item" index="index" separator="" >
                    <if test="(colPickMode==0 and item.containsKey('productFacePath')) or (colPickMode==1 and !item.containsKey('productFacePath'))">
                        when a.id=#{item.id} then #{item.productFacePath}
                    </if>
                </foreach>
            </trim>
            <trim prefix="productVideoPath=(case" suffix="ELSE productVideoPath end),">
                <foreach collection="data.dataList" item="item" index="index" separator="" >
                    <if test="(colPickMode==0 and item.containsKey('productVideoPath')) or (colPickMode==1 and !item.containsKey('productVideoPath'))">
                        when a.id=#{item.id} then #{item.productVideoPath}
                    </if>
                </foreach>
            </trim>
            <trim prefix="productPicPath=(case" suffix="ELSE productPicPath end),">
                <foreach collection="data.dataList" item="item" index="index" separator="" >
                    <if test="(colPickMode==0 and item.containsKey('productPicPath')) or (colPickMode==1 and !item.containsKey('productPicPath'))">
                        when a.id=#{item.id} then #{item.productPicPath}
                    </if>
                </foreach>
            </trim>
            <trim prefix="productIntroduction=(case" suffix="ELSE productIntroduction end),">
                <foreach collection="data.dataList" item="item" index="index" separator="" >
                    <if test="(colPickMode==0 and item.containsKey('productIntroduction')) or (colPickMode==1 and !item.containsKey('productIntroduction'))">
                        when a.id=#{item.id} then #{item.productIntroduction}
                    </if>
                </foreach>
            </trim>
            <trim prefix="productDetail=(case" suffix="ELSE productDetail end),">
                <foreach collection="data.dataList" item="item" index="index" separator="" >
                    <if test="(colPickMode==0 and item.containsKey('productDetail')) or (colPickMode==1 and !item.containsKey('productDetail'))">
                        when a.id=#{item.id} then #{item.productDetail}
                    </if>
                </foreach>
            </trim>
            <trim prefix="publishTime=(case" suffix="ELSE publishTime end),">
                <foreach collection="data.dataList" item="item" index="index" separator="" >
                    <if test="(colPickMode==0 and item.containsKey('publishTime')) or (colPickMode==1 and !item.containsKey('publishTime'))">
                        when a.id=#{item.id} then #{item.publishTime}
                    </if>
                </foreach>
            </trim>
            <trim prefix="hot=(case" suffix="ELSE hot end),">
                <foreach collection="data.dataList" item="item" index="index" separator="" >
                    <choose>
                        <when test="(colPickMode==0 and item.containsKey('hot')) or (colPickMode==1 and !item.containsKey('hot'))">
                            when a.id=#{item.id} then #{item.hot}
                        </when>
                        <when test="(colPickMode==0 and item.containsKey('hotIncrement')) or (colPickMode==1 and !item.containsKey('hotIncrement'))">
                            when a.id=#{item.id} then ifnull(a.hot,0) + #{item.hotIncrement}
                        </when>
                    </choose>
                </foreach>
            </trim>
            <trim prefix="productRemark=(case" suffix="ELSE productRemark end),">
                <foreach collection="data.dataList" item="item" index="index" separator="" >
                    <if test="(colPickMode==0 and item.containsKey('productRemark')) or (colPickMode==1 and !item.containsKey('productRemark'))">
                        when a.id=#{item.id} then #{item.productRemark}
                    </if>
                </foreach>
            </trim>
            <trim prefix="createUserId=(case" suffix="ELSE createUserId end),">
                <foreach collection="data.dataList" item="item" index="index" separator="" >
                    <choose>
                        <when test="(colPickMode==0 and item.containsKey('createUserId')) or (colPickMode==1 and !item.containsKey('createUserId'))">
                            when a.id=#{item.id} then #{item.createUserId}
                        </when>
                        <when test="(colPickMode==0 and item.containsKey('createUserIdIncrement')) or (colPickMode==1 and !item.containsKey('createUserIdIncrement'))">
                            when a.id=#{item.id} then ifnull(a.createUserId,0) + #{item.createUserIdIncrement}
                        </when>
                    </choose>
                </foreach>
            </trim>
            <trim prefix="createTime=(case" suffix="ELSE createTime end),">
                <foreach collection="data.dataList" item="item" index="index" separator="" >
                    <if test="(colPickMode==0 and item.containsKey('createTime')) or (colPickMode==1 and !item.containsKey('createTime'))">
                        when a.id=#{item.id} then #{item.createTime}
                    </if>
                </foreach>
            </trim>
            <trim prefix="updateUserId=(case" suffix="ELSE updateUserId end),">
                <foreach collection="data.dataList" item="item" index="index" separator="" >
                    <choose>
                        <when test="(colPickMode==0 and item.containsKey('updateUserId')) or (colPickMode==1 and !item.containsKey('updateUserId'))">
                            when a.id=#{item.id} then #{item.updateUserId}
                        </when>
                        <when test="(colPickMode==0 and item.containsKey('updateUserIdIncrement')) or (colPickMode==1 and !item.containsKey('updateUserIdIncrement'))">
                            when a.id=#{item.id} then ifnull(a.updateUserId,0) + #{item.updateUserIdIncrement}
                        </when>
                    </choose>
                </foreach>
            </trim>
            <trim prefix="updateTime=(case" suffix="ELSE updateTime end),">
                <foreach collection="data.dataList" item="item" index="index" separator="" >
                    <if test="(colPickMode==0 and item.containsKey('updateTime')) or (colPickMode==1 and !item.containsKey('updateTime'))">
                        when a.id=#{item.id} then #{item.updateTime}
                    </if>
                </foreach>
            </trim>
            <trim prefix="shelves=(case" suffix="ELSE shelves end),">
                <foreach collection="data.dataList" item="item" index="index" separator="" >
                    <choose>
                        <when test="(colPickMode==0 and item.containsKey('shelves')) or (colPickMode==1 and !item.containsKey('shelves'))">
                            when a.id=#{item.id} then #{item.shelves}
                        </when>
                        <when test="(colPickMode==0 and item.containsKey('shelvesIncrement')) or (colPickMode==1 and !item.containsKey('shelvesIncrement'))">
                            when a.id=#{item.id} then ifnull(a.shelves,0) + #{item.shelvesIncrement}
                        </when>
                    </choose>
                </foreach>
            </trim>
        </trim>
        where id in
        <foreach collection="data.dataList" item="item" index="index" open="(" separator="," close=")">
            #{item.id}
        </foreach>
    </update>
    <!-- 根据主健查询 -->
    <select id="getByKey" parameterType="paramDto" resultMap="ProductEntity-Map">
        select <include refid="_columns"/>
        from mortals_xhx_product as a
        where a.id=#{condition.id}
    </select>
    <!-- 根据主健删除 -->
    <delete id="deleteByKey" parameterType="paramDto">
        delete a.* from mortals_xhx_product as a where a.id=#{condition.id}
    </delete>
    <!-- 根据主健删除一批，针对单一主健有效 -->
    <delete id="deleteByKeys">
        delete from mortals_xhx_product where id in
        <foreach collection="array" item="item" index="index" open="(" separator="," close=")">
            #{item}
        </foreach>
    </delete>
    <!-- 根据主健列表删除一批，针对单一主健有效 -->
    <delete id="deleteByKeyList">
        delete from mortals_xhx_product where id in
        <foreach collection="list" item="item" index="index" open="(" separator="," close=")">
            #{item}
        </foreach>
    </delete>

    <!-- 根据对象列表删除一批，针对单一主健有效 -->
    <delete id="deleteByEntityList">
        delete from mortals_xhx_product where id in
        <foreach collection="list" item="item" index="index" open="(" separator="," close=")">
            #{item.id}
        </foreach>
    </delete>
    <!-- 根据paramDto删除一批 -->
    <delete id="deleteByMap" parameterType="paramDto">
        delete a.* from mortals_xhx_product as a
        <trim suffixOverrides="where" suffix="">
            where
            <trim prefixOverrides="and" prefix="">
                <include refid="_condition_"/>
            </trim>
        </trim>
    </delete>
    <!-- 获取列表 -->
    <select id="getList" parameterType="paramDto" resultMap="ProductEntity-Map">
        select <include refid="_columns"/>
        from mortals_xhx_product as a
        <trim suffixOverrides="where" suffix="">
            where
            <trim prefixOverrides="and" prefix="">
                <include refid="_condition_"/>
            </trim>
        </trim>
        <include refid="_orderCols_"/>
    </select>
    <!-- 获取子列表 -->



    <!-- 获取 -->
    <select id="getListCount" parameterType="paramDto" resultType="int">
        select count(1)
        from mortals_xhx_product as a
        <trim suffixOverrides="where" suffix="">
            where
            <trim prefixOverrides="and" prefix="">
                <include refid="_condition_"/>
            </trim>
        </trim>
    </select>
    <!-- 条件映射 -->
    <sql id="_condition_">
        <if test="condition != null and !condition.isEmpty()">
            <!-- 条件映射-普通条件 -->
            <include refid="_condition_param_">
                <property name="_conditionParam_" value="condition"/>
                <property name="_conditionType_" value="and"/>
            </include>
            <!-- 条件映射-集合之间使用AND，集合中元素使用OR-(list[0].1 or list[0].2) and (list[1].3 or list[1].4) -->
            <if test="condition.containsKey('andConditionList') and !condition.andConditionList.isEmpty()">
                and
                <foreach collection="condition.andConditionList" open="(" close=")" index="index" item="andCondition" separator=" and ">
                    <trim prefixOverrides="or" prefix="(" suffix=")">
                        <include refid="_condition_param_">
                            <property name="_conditionParam_" value="andCondition"/>
                            <property name="_conditionType_" value="or"/>
                        </include>
                    </trim>
                </foreach>
            </if>
            <!-- 条件映射-集合之间使用OR，集合中元素使用AND-(list[0].1 and list[0].2) or (list[1].3 and list[1].4) -->
            <if test="condition.containsKey('orConditionList') and !condition.orConditionList.isEmpty()">
                and
                <foreach collection="condition.orConditionList" open="(" close=")" index="index" item="orCondition" separator=" or ">
                    <trim prefixOverrides="and" prefix="(" suffix=")">
                        <include refid="_condition_param_">
                            <property name="_conditionParam_" value="orCondition"/>
                            <property name="_conditionType_" value="and"/>
                        </include>
                    </trim>
                </foreach>
            </if>
        </if>
    </sql>
    <!-- 条件映射-代参数 -->
    <sql id="_condition_param_">
        <bind name="conditionParamRef" value="${_conditionParam_}"/>
        <if test="permissionSql != null and permissionSql != ''">
            ${permissionSql}
        </if>

        <if test="conditionParamRef.containsKey('id')">
            <if test="conditionParamRef.id != null">
                ${_conditionType_} a.id=#{${_conditionParam_}.id}
            </if>
        </if>
        <if test="conditionParamRef.containsKey('id')">
            <if test="conditionParamRef.id != null ">
                ${_conditionType_} a.id = #{${_conditionParam_}.id}
            </if>
            <if test="conditionParamRef.id == null">
                ${_conditionType_} a.id is null
            </if>
        </if>
        <if test="conditionParamRef.containsKey('idList') and conditionParamRef.idList.size() > 0">
            ${_conditionType_} a.id in
            <foreach collection="conditionParamRef.idList" open="(" close=")" index="index" item="item" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="conditionParamRef.containsKey('idNotList') and conditionParamRef.idNotList.size() > 0">
            ${_conditionType_} a.id not in
            <foreach collection="conditionParamRef.idNotList" open="(" close=")" index="index" item="item" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="conditionParamRef.containsKey('idStart') and conditionParamRef.idStart != null">
            ${_conditionType_} a.id <![CDATA[ >= ]]> #{${_conditionParam_}.idStart}
        </if>
        <if test="conditionParamRef.containsKey('idEnd') and conditionParamRef.idEnd != null">
            ${_conditionType_} a.id <![CDATA[ <= ]]> #{${_conditionParam_}.idEnd}
        </if>


        <if test="conditionParamRef.containsKey('productName')">
            <if test="conditionParamRef.productName != null and conditionParamRef.productName != ''">
                ${_conditionType_} a.productName like #{${_conditionParam_}.productName}
            </if>
            <if test="conditionParamRef.productName == null">
                ${_conditionType_} a.productName is null
            </if>
        </if>
        <if test="conditionParamRef.containsKey('productNameList') and conditionParamRef.productNameList.size() > 0">
            ${_conditionType_} a.productName in
            <foreach collection="conditionParamRef.productNameList" open="(" close=")" index="index" item="item" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="conditionParamRef.containsKey('productNameNotList') and conditionParamRef.productNameNotList.size() > 0">
            ${_conditionType_} a.productName not in
            <foreach collection="conditionParamRef.productNameNotList" open="(" close=")" index="index" item="item" separator=",">
                #{item}
            </foreach>
        </if>

        <if test="conditionParamRef.containsKey('productCode')">
            <if test="conditionParamRef.productCode != null and conditionParamRef.productCode != ''">
                ${_conditionType_} a.productCode like #{${_conditionParam_}.productCode}
            </if>
            <if test="conditionParamRef.productCode == null">
                ${_conditionType_} a.productCode is null
            </if>
        </if>
        <if test="conditionParamRef.containsKey('productCodeList') and conditionParamRef.productCodeList.size() > 0">
            ${_conditionType_} a.productCode in
            <foreach collection="conditionParamRef.productCodeList" open="(" close=")" index="index" item="item" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="conditionParamRef.containsKey('productCodeNotList') and conditionParamRef.productCodeNotList.size() > 0">
            ${_conditionType_} a.productCode not in
            <foreach collection="conditionParamRef.productCodeNotList" open="(" close=")" index="index" item="item" separator=",">
                #{item}
            </foreach>
        </if>

        <if test="conditionParamRef.containsKey('productSlogan')">
            <if test="conditionParamRef.productSlogan != null and conditionParamRef.productSlogan != ''">
                ${_conditionType_} a.productSlogan like #{${_conditionParam_}.productSlogan}
            </if>
            <if test="conditionParamRef.productSlogan == null">
                ${_conditionType_} a.productSlogan is null
            </if>
        </if>
        <if test="conditionParamRef.containsKey('productSloganList') and conditionParamRef.productSloganList.size() > 0">
            ${_conditionType_} a.productSlogan in
            <foreach collection="conditionParamRef.productSloganList" open="(" close=")" index="index" item="item" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="conditionParamRef.containsKey('productSloganNotList') and conditionParamRef.productSloganNotList.size() > 0">
            ${_conditionType_} a.productSlogan not in
            <foreach collection="conditionParamRef.productSloganNotList" open="(" close=")" index="index" item="item" separator=",">
                #{item}
            </foreach>
        </if>

        <if test="conditionParamRef.containsKey('productLogoPath')">
            <if test="conditionParamRef.productLogoPath != null and conditionParamRef.productLogoPath != ''">
                ${_conditionType_} a.productLogoPath like #{${_conditionParam_}.productLogoPath}
            </if>
            <if test="conditionParamRef.productLogoPath == null">
                ${_conditionType_} a.productLogoPath is null
            </if>
        </if>
        <if test="conditionParamRef.containsKey('productLogoPathList') and conditionParamRef.productLogoPathList.size() > 0">
            ${_conditionType_} a.productLogoPath in
            <foreach collection="conditionParamRef.productLogoPathList" open="(" close=")" index="index" item="item" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="conditionParamRef.containsKey('productLogoPathNotList') and conditionParamRef.productLogoPathNotList.size() > 0">
            ${_conditionType_} a.productLogoPath not in
            <foreach collection="conditionParamRef.productLogoPathNotList" open="(" close=")" index="index" item="item" separator=",">
                #{item}
            </foreach>
        </if>

        <if test="conditionParamRef.containsKey('productFacePath')">
            <if test="conditionParamRef.productFacePath != null and conditionParamRef.productFacePath != ''">
                ${_conditionType_} a.productFacePath like #{${_conditionParam_}.productFacePath}
            </if>
            <if test="conditionParamRef.productFacePath == null">
                ${_conditionType_} a.productFacePath is null
            </if>
        </if>
        <if test="conditionParamRef.containsKey('productFacePathList') and conditionParamRef.productFacePathList.size() > 0">
            ${_conditionType_} a.productFacePath in
            <foreach collection="conditionParamRef.productFacePathList" open="(" close=")" index="index" item="item" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="conditionParamRef.containsKey('productFacePathNotList') and conditionParamRef.productFacePathNotList.size() > 0">
            ${_conditionType_} a.productFacePath not in
            <foreach collection="conditionParamRef.productFacePathNotList" open="(" close=")" index="index" item="item" separator=",">
                #{item}
            </foreach>
        </if>

        <if test="conditionParamRef.containsKey('productVideoPath')">
            <if test="conditionParamRef.productVideoPath != null and conditionParamRef.productVideoPath != ''">
                ${_conditionType_} a.productVideoPath like #{${_conditionParam_}.productVideoPath}
            </if>
            <if test="conditionParamRef.productVideoPath == null">
                ${_conditionType_} a.productVideoPath is null
            </if>
        </if>
        <if test="conditionParamRef.containsKey('productVideoPathList') and conditionParamRef.productVideoPathList.size() > 0">
            ${_conditionType_} a.productVideoPath in
            <foreach collection="conditionParamRef.productVideoPathList" open="(" close=")" index="index" item="item" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="conditionParamRef.containsKey('productVideoPathNotList') and conditionParamRef.productVideoPathNotList.size() > 0">
            ${_conditionType_} a.productVideoPath not in
            <foreach collection="conditionParamRef.productVideoPathNotList" open="(" close=")" index="index" item="item" separator=",">
                #{item}
            </foreach>
        </if>

        <if test="conditionParamRef.containsKey('productPicPath')">
            <if test="conditionParamRef.productPicPath != null and conditionParamRef.productPicPath != ''">
                ${_conditionType_} a.productPicPath like #{${_conditionParam_}.productPicPath}
            </if>
            <if test="conditionParamRef.productPicPath == null">
                ${_conditionType_} a.productPicPath is null
            </if>
        </if>
        <if test="conditionParamRef.containsKey('productPicPathList') and conditionParamRef.productPicPathList.size() > 0">
            ${_conditionType_} a.productPicPath in
            <foreach collection="conditionParamRef.productPicPathList" open="(" close=")" index="index" item="item" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="conditionParamRef.containsKey('productPicPathNotList') and conditionParamRef.productPicPathNotList.size() > 0">
            ${_conditionType_} a.productPicPath not in
            <foreach collection="conditionParamRef.productPicPathNotList" open="(" close=")" index="index" item="item" separator=",">
                #{item}
            </foreach>
        </if>

        <if test="conditionParamRef.containsKey('productIntroduction')">
            <if test="conditionParamRef.productIntroduction != null and conditionParamRef.productIntroduction != ''">
                ${_conditionType_} a.productIntroduction like #{${_conditionParam_}.productIntroduction}
            </if>
            <if test="conditionParamRef.productIntroduction == null">
                ${_conditionType_} a.productIntroduction is null
            </if>
        </if>
        <if test="conditionParamRef.containsKey('productIntroductionList') and conditionParamRef.productIntroductionList.size() > 0">
            ${_conditionType_} a.productIntroduction in
            <foreach collection="conditionParamRef.productIntroductionList" open="(" close=")" index="index" item="item" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="conditionParamRef.containsKey('productIntroductionNotList') and conditionParamRef.productIntroductionNotList.size() > 0">
            ${_conditionType_} a.productIntroduction not in
            <foreach collection="conditionParamRef.productIntroductionNotList" open="(" close=")" index="index" item="item" separator=",">
                #{item}
            </foreach>
        </if>

        <if test="conditionParamRef.containsKey('productDetail')">
            <if test="conditionParamRef.productDetail != null and conditionParamRef.productDetail != ''">
                ${_conditionType_} a.productDetail like #{${_conditionParam_}.productDetail}
            </if>
            <if test="conditionParamRef.productDetail == null">
                ${_conditionType_} a.productDetail is null
            </if>
        </if>
        <if test="conditionParamRef.containsKey('productDetailList') and conditionParamRef.productDetailList.size() > 0">
            ${_conditionType_} a.productDetail in
            <foreach collection="conditionParamRef.productDetailList" open="(" close=")" index="index" item="item" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="conditionParamRef.containsKey('productDetailNotList') and conditionParamRef.productDetailNotList.size() > 0">
            ${_conditionType_} a.productDetail not in
            <foreach collection="conditionParamRef.productDetailNotList" open="(" close=")" index="index" item="item" separator=",">
                #{item}
            </foreach>
        </if>

        <if test="conditionParamRef.containsKey('publishTime')">
            <if test="conditionParamRef.publishTime != null ">
                ${_conditionType_} a.publishTime = #{${_conditionParam_}.publishTime}
            </if>
            <if test="conditionParamRef.publishTime == null">
                ${_conditionType_} a.publishTime is null
            </if>
        </if>
        <if test="conditionParamRef.containsKey('publishTimeStart') and conditionParamRef.publishTimeStart != null and conditionParamRef.publishTimeStart!=''">
            ${_conditionType_} a.publishTime <![CDATA[ >= ]]> STR_TO_DATE(left(concat(#{${_conditionParam_}.publishTimeStart},' 00:00:00'),19),'%Y-%m-%d %k:%i:%s')
        </if>
        <if test="conditionParamRef.containsKey('publishTimeEnd') and conditionParamRef.publishTimeEnd != null and conditionParamRef.publishTimeEnd!=''">
            ${_conditionType_} a.publishTime <![CDATA[ <= ]]> STR_TO_DATE(left(concat(#{${_conditionParam_}.publishTimeEnd},' 23:59:59'),19),'%Y-%m-%d %k:%i:%s')
        </if>
        <if test="conditionParamRef.containsKey('hot')">
            <if test="conditionParamRef.hot != null ">
                ${_conditionType_} a.hot = #{${_conditionParam_}.hot}
            </if>
            <if test="conditionParamRef.hot == null">
                ${_conditionType_} a.hot is null
            </if>
        </if>
        <if test="conditionParamRef.containsKey('hotList') and conditionParamRef.hotList.size() > 0">
            ${_conditionType_} a.hot in
            <foreach collection="conditionParamRef.hotList" open="(" close=")" index="index" item="item" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="conditionParamRef.containsKey('hotNotList') and conditionParamRef.hotNotList.size() > 0">
            ${_conditionType_} a.hot not in
            <foreach collection="conditionParamRef.hotNotList" open="(" close=")" index="index" item="item" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="conditionParamRef.containsKey('hotStart') and conditionParamRef.hotStart != null">
            ${_conditionType_} a.hot <![CDATA[ >= ]]> #{${_conditionParam_}.hotStart}
        </if>
        <if test="conditionParamRef.containsKey('hotEnd') and conditionParamRef.hotEnd != null">
            ${_conditionType_} a.hot <![CDATA[ <= ]]> #{${_conditionParam_}.hotEnd}
        </if>


        <if test="conditionParamRef.containsKey('productRemark')">
            <if test="conditionParamRef.productRemark != null and conditionParamRef.productRemark != ''">
                ${_conditionType_} a.productRemark like #{${_conditionParam_}.productRemark}
            </if>
            <if test="conditionParamRef.productRemark == null">
                ${_conditionType_} a.productRemark is null
            </if>
        </if>
        <if test="conditionParamRef.containsKey('productRemarkList') and conditionParamRef.productRemarkList.size() > 0">
            ${_conditionType_} a.productRemark in
            <foreach collection="conditionParamRef.productRemarkList" open="(" close=")" index="index" item="item" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="conditionParamRef.containsKey('productRemarkNotList') and conditionParamRef.productRemarkNotList.size() > 0">
            ${_conditionType_} a.productRemark not in
            <foreach collection="conditionParamRef.productRemarkNotList" open="(" close=")" index="index" item="item" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="conditionParamRef.containsKey('createUserId')">
            <if test="conditionParamRef.createUserId != null ">
                ${_conditionType_} a.createUserId = #{${_conditionParam_}.createUserId}
            </if>
            <if test="conditionParamRef.createUserId == null">
                ${_conditionType_} a.createUserId is null
            </if>
        </if>
        <if test="conditionParamRef.containsKey('createUserIdList') and conditionParamRef.createUserIdList.size() > 0">
            ${_conditionType_} a.createUserId in
            <foreach collection="conditionParamRef.createUserIdList" open="(" close=")" index="index" item="item" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="conditionParamRef.containsKey('createUserIdNotList') and conditionParamRef.createUserIdNotList.size() > 0">
            ${_conditionType_} a.createUserId not in
            <foreach collection="conditionParamRef.createUserIdNotList" open="(" close=")" index="index" item="item" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="conditionParamRef.containsKey('createUserIdStart') and conditionParamRef.createUserIdStart != null">
            ${_conditionType_} a.createUserId <![CDATA[ >= ]]> #{${_conditionParam_}.createUserIdStart}
        </if>
        <if test="conditionParamRef.containsKey('createUserIdEnd') and conditionParamRef.createUserIdEnd != null">
            ${_conditionType_} a.createUserId <![CDATA[ <= ]]> #{${_conditionParam_}.createUserIdEnd}
        </if>


        <if test="conditionParamRef.containsKey('createTime')">
            <if test="conditionParamRef.createTime != null ">
                ${_conditionType_} a.createTime = #{${_conditionParam_}.createTime}
            </if>
            <if test="conditionParamRef.createTime == null">
                ${_conditionType_} a.createTime is null
            </if>
        </if>
        <if test="conditionParamRef.containsKey('createTimeStart') and conditionParamRef.createTimeStart != null and conditionParamRef.createTimeStart!=''">
            ${_conditionType_} a.createTime <![CDATA[ >= ]]> STR_TO_DATE(left(concat(#{${_conditionParam_}.createTimeStart},' 00:00:00'),19),'%Y-%m-%d %k:%i:%s')
        </if>
        <if test="conditionParamRef.containsKey('createTimeEnd') and conditionParamRef.createTimeEnd != null and conditionParamRef.createTimeEnd!=''">
            ${_conditionType_} a.createTime <![CDATA[ <= ]]> STR_TO_DATE(left(concat(#{${_conditionParam_}.createTimeEnd},' 23:59:59'),19),'%Y-%m-%d %k:%i:%s')
        </if>
        <if test="conditionParamRef.containsKey('updateUserId')">
            <if test="conditionParamRef.updateUserId != null ">
                ${_conditionType_} a.updateUserId = #{${_conditionParam_}.updateUserId}
            </if>
            <if test="conditionParamRef.updateUserId == null">
                ${_conditionType_} a.updateUserId is null
            </if>
        </if>
        <if test="conditionParamRef.containsKey('updateUserIdList') and conditionParamRef.updateUserIdList.size() > 0">
            ${_conditionType_} a.updateUserId in
            <foreach collection="conditionParamRef.updateUserIdList" open="(" close=")" index="index" item="item" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="conditionParamRef.containsKey('updateUserIdNotList') and conditionParamRef.updateUserIdNotList.size() > 0">
            ${_conditionType_} a.updateUserId not in
            <foreach collection="conditionParamRef.updateUserIdNotList" open="(" close=")" index="index" item="item" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="conditionParamRef.containsKey('updateUserIdStart') and conditionParamRef.updateUserIdStart != null">
            ${_conditionType_} a.updateUserId <![CDATA[ >= ]]> #{${_conditionParam_}.updateUserIdStart}
        </if>
        <if test="conditionParamRef.containsKey('updateUserIdEnd') and conditionParamRef.updateUserIdEnd != null">
            ${_conditionType_} a.updateUserId <![CDATA[ <= ]]> #{${_conditionParam_}.updateUserIdEnd}
        </if>


        <if test="conditionParamRef.containsKey('updateTime')">
            <if test="conditionParamRef.updateTime != null ">
                ${_conditionType_} a.updateTime = #{${_conditionParam_}.updateTime}
            </if>
            <if test="conditionParamRef.updateTime == null">
                ${_conditionType_} a.updateTime is null
            </if>
        </if>
        <if test="conditionParamRef.containsKey('updateTimeStart') and conditionParamRef.updateTimeStart != null and conditionParamRef.updateTimeStart!=''">
            ${_conditionType_} a.updateTime <![CDATA[ >= ]]> STR_TO_DATE(left(concat(#{${_conditionParam_}.updateTimeStart},' 00:00:00'),19),'%Y-%m-%d %k:%i:%s')
        </if>
        <if test="conditionParamRef.containsKey('updateTimeEnd') and conditionParamRef.updateTimeEnd != null and conditionParamRef.updateTimeEnd!=''">
            ${_conditionType_} a.updateTime <![CDATA[ <= ]]> STR_TO_DATE(left(concat(#{${_conditionParam_}.updateTimeEnd},' 23:59:59'),19),'%Y-%m-%d %k:%i:%s')
        </if>
        <if test="conditionParamRef.containsKey('shelves')">
            <if test="conditionParamRef.shelves != null ">
                ${_conditionType_} a.shelves = #{${_conditionParam_}.shelves}
            </if>
            <if test="conditionParamRef.shelves == null">
                ${_conditionType_} a.shelves is null
            </if>
        </if>
        <if test="conditionParamRef.containsKey('shelvesList') and conditionParamRef.shelvesList.size() > 0">
            ${_conditionType_} a.shelves in
            <foreach collection="conditionParamRef.shelvesList" open="(" close=")" index="index" item="item" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="conditionParamRef.containsKey('shelvesNotList') and conditionParamRef.shelvesNotList.size() > 0">
            ${_conditionType_} a.shelves not in
            <foreach collection="conditionParamRef.shelvesNotList" open="(" close=")" index="index" item="item" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="conditionParamRef.containsKey('shelvesStart') and conditionParamRef.shelvesStart != null">
            ${_conditionType_} a.shelves <![CDATA[ >= ]]> #{${_conditionParam_}.shelvesStart}
        </if>
        <if test="conditionParamRef.containsKey('shelvesEnd') and conditionParamRef.shelvesEnd != null">
            ${_conditionType_} a.shelves <![CDATA[ <= ]]> #{${_conditionParam_}.shelvesEnd}
        </if>

    </sql>
    <sql id="_orderCols_">
        <if test="orderColList != null and !orderColList.isEmpty()">
            order by
            <if test="conditionParamRef.containsKey('idList') and conditionParamRef.idList.size() > 0">
                field(a.id,
                <foreach collection="conditionParamRef.idList" open="" close=")" index="index" item="item" separator=",">
                    #{item}
                </foreach>
                ,
            </if>
            <if test="conditionParamRef.containsKey('hotList') and conditionParamRef.hotList.size() > 0">
                field(a.hot,
                <foreach collection="conditionParamRef.hotList" open="" close=")" index="index" item="item" separator=",">
                    #{item}
                </foreach>
                ,
            </if>
            <if test="conditionParamRef.containsKey('createUserIdList') and conditionParamRef.createUserIdList.size() > 0">
                field(a.createUserId,
                <foreach collection="conditionParamRef.createUserIdList" open="" close=")" index="index" item="item" separator=",">
                    #{item}
                </foreach>
                ,
            </if>
            <if test="conditionParamRef.containsKey('updateUserIdList') and conditionParamRef.updateUserIdList.size() > 0">
                field(a.updateUserId,
                <foreach collection="conditionParamRef.updateUserIdList" open="" close=")" index="index" item="item" separator=",">
                    #{item}
                </foreach>
                ,
            </if>
            <if test="conditionParamRef.containsKey('shelvesList') and conditionParamRef.shelvesList.size() > 0">
                field(a.shelves,
                <foreach collection="conditionParamRef.shelvesList" open="" close=")" index="index" item="item" separator=",">
                    #{item}
                </foreach>
                ,
            </if>
            <trim suffixOverrides=","  suffix="">
                <foreach collection="orderColList" open="" close="" index="index" item="item" separator=",">
                    a.${item.colName} ${item.sortKind}
                </foreach>
            </trim>
        </if>
        <if test="(orderColList == null or orderColList.isEmpty()) and orderCol != null and !orderCol.isEmpty()">
            order by
            <if test="conditionParamRef.containsKey('idList') and conditionParamRef.idList.size() > 0">
                field(a.id,
                <foreach collection="conditionParamRef.idList" open="" close=")" index="index" item="item" separator=",">
                    #{item}
                </foreach>
                ,
            </if>
            <if test="conditionParamRef.containsKey('hotList') and conditionParamRef.hotList.size() > 0">
                field(a.hot,
                <foreach collection="conditionParamRef.hotList" open="" close=")" index="index" item="item" separator=",">
                    #{item}
                </foreach>
                ,
            </if>
            <if test="conditionParamRef.containsKey('createUserIdList') and conditionParamRef.createUserIdList.size() > 0">
                field(a.createUserId,
                <foreach collection="conditionParamRef.createUserIdList" open="" close=")" index="index" item="item" separator=",">
                    #{item}
                </foreach>
                ,
            </if>
            <if test="conditionParamRef.containsKey('updateUserIdList') and conditionParamRef.updateUserIdList.size() > 0">
                field(a.updateUserId,
                <foreach collection="conditionParamRef.updateUserIdList" open="" close=")" index="index" item="item" separator=",">
                    #{item}
                </foreach>
                ,
            </if>
            <if test="conditionParamRef.containsKey('shelvesList') and conditionParamRef.shelvesList.size() > 0">
                field(a.shelves,
                <foreach collection="conditionParamRef.shelvesList" open="" close=")" index="index" item="item" separator=",">
                    #{item}
                </foreach>
                ,
            </if>
            <trim suffixOverrides=","  suffix="">
                <if test="orderCol.containsKey('id')">
                    a.id
                    <if test='orderCol.id != null and "DESC".equalsIgnoreCase(orderCol.id)'>DESC</if>
                    ,
                </if>
                <if test="orderCol.containsKey('productName')">
                    a.productName
                    <if test='orderCol.productName != null and "DESC".equalsIgnoreCase(orderCol.productName)'>DESC</if>
                    ,
                </if>
                <if test="orderCol.containsKey('productCode')">
                    a.productCode
                    <if test='orderCol.productCode != null and "DESC".equalsIgnoreCase(orderCol.productCode)'>DESC</if>
                    ,
                </if>
                <if test="orderCol.containsKey('productSlogan')">
                    a.productSlogan
                    <if test='orderCol.productSlogan != null and "DESC".equalsIgnoreCase(orderCol.productSlogan)'>DESC</if>
                    ,
                </if>
                <if test="orderCol.containsKey('productLogoPath')">
                    a.productLogoPath
                    <if test='orderCol.productLogoPath != null and "DESC".equalsIgnoreCase(orderCol.productLogoPath)'>DESC</if>
                    ,
                </if>
                <if test="orderCol.containsKey('productFacePath')">
                    a.productFacePath
                    <if test='orderCol.productFacePath != null and "DESC".equalsIgnoreCase(orderCol.productFacePath)'>DESC</if>
                    ,
                </if>
                <if test="orderCol.containsKey('productVideoPath')">
                    a.productVideoPath
                    <if test='orderCol.productVideoPath != null and "DESC".equalsIgnoreCase(orderCol.productVideoPath)'>DESC</if>
                    ,
                </if>
                <if test="orderCol.containsKey('productPicPath')">
                    a.productPicPath
                    <if test='orderCol.productPicPath != null and "DESC".equalsIgnoreCase(orderCol.productPicPath)'>DESC</if>
                    ,
                </if>
                <if test="orderCol.containsKey('productIntroduction')">
                    a.productIntroduction
                    <if test='orderCol.productIntroduction != null and "DESC".equalsIgnoreCase(orderCol.productIntroduction)'>DESC</if>
                    ,
                </if>
                <if test="orderCol.containsKey('productDetail')">
                    a.productDetail
                    <if test='orderCol.productDetail != null and "DESC".equalsIgnoreCase(orderCol.productDetail)'>DESC</if>
                    ,
                </if>
                <if test="orderCol.containsKey('publishTime')">
                    a.publishTime
                    <if test='orderCol.publishTime != null and "DESC".equalsIgnoreCase(orderCol.publishTime)'>DESC</if>
                    ,
                </if>
                <if test="orderCol.containsKey('hot')">
                    a.hot
                    <if test='orderCol.hot != null and "DESC".equalsIgnoreCase(orderCol.hot)'>DESC</if>
                    ,
                </if>
                <if test="orderCol.containsKey('productRemark')">
                    a.productRemark
                    <if test='orderCol.productRemark != null and "DESC".equalsIgnoreCase(orderCol.productRemark)'>DESC</if>
                    ,
                </if>
                <if test="orderCol.containsKey('createUserId')">
                    a.createUserId
                    <if test='orderCol.createUserId != null and "DESC".equalsIgnoreCase(orderCol.createUserId)'>DESC</if>
                    ,
                </if>
                <if test="orderCol.containsKey('createTime')">
                    a.createTime
                    <if test='orderCol.createTime != null and "DESC".equalsIgnoreCase(orderCol.createTime)'>DESC</if>
                    ,
                </if>
                <if test="orderCol.containsKey('updateUserId')">
                    a.updateUserId
                    <if test='orderCol.updateUserId != null and "DESC".equalsIgnoreCase(orderCol.updateUserId)'>DESC</if>
                    ,
                </if>
                <if test="orderCol.containsKey('updateTime')">
                    a.updateTime
                    <if test='orderCol.updateTime != null and "DESC".equalsIgnoreCase(orderCol.updateTime)'>DESC</if>
                    ,
                </if>
                <if test="orderCol.containsKey('shelves')">
                    a.shelves
                    <if test='orderCol.shelves != null and "DESC".equalsIgnoreCase(orderCol.shelves)'>DESC</if>
                    ,
                </if>
            </trim>
        </if>


    </sql>
    <sql id="_group_by_">
        <if test="groupList != null and !groupList.isEmpty()">
            GROUP BY
            <trim suffixOverrides=","  suffix="">
                <foreach collection="groupList" open="" close="" index="index" item="item" separator=",">
                    ${item}
                </foreach>
            </trim>
        </if>
    </sql>
</mapper>