<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 
 * @title: ${tableComments}
 * @description: 自定义sql，请自行实现业务逻辑
 * @company: hugeinfo
 * @author: ${author}
 * @time:${createTime}
 * @version ${version}
-->
<mapper namespace="${basePackage}.${packageName}.dao.mapper.${className}Mapper">
    <!-- 结果集 -->
    <resultMap id="dataResult" type="${basePackage}.${packageName}.domain.po.${className}">
        <#list cols as col>
            <result property="${col.fieldName}" column="${col.name}"/>
        </#list>
    </resultMap>
    <!-- 表 -->
    <sql id='table-name'>${tableName}</sql>
    <!-- 字段 -->
    <sql id="column-part">
        <#list cols as col>
        ${col.name}<#if col_has_next>,</#if>
        </#list>
    </sql>
    <!-- 更新实体字段 -->
    <sql id="set-part">
        <#list cols as col>
            <#if (col.name != "id")>
            <if test="entity.${col.fieldName} != null">${col.name} = <#noparse>#{</#noparse>entity.${col.fieldName}<#noparse>}</#noparse><#if col_has_next>,</#if></if>
            </#if>
        </#list>
    </sql>
    <!-- 条件 -->
    <sql id="where-part">
        <if test="terms != null">
            <where>
                <#list cols as col>
                <#if (col.name != "create_time" && col.name != "update_time" && col.name != "delete_status" )>
                <if test="terms.${col.fieldName} != null and terms.${col.fieldName} !=''">
                    and ${col.name} = <#noparse>#{</#noparse>terms.${col.fieldName}<#noparse>}</#noparse>
                </if>
                </#if>
                <#if (col.name == "create_time")>
                <if test="terms.${col.fieldName} != null and terms.${col.fieldName} !=''">
                    and DATE_FORMAT(${col.name},'%Y-%m-%d') = <#noparse>#{</#noparse>terms.${col.fieldName}<#noparse>}</#noparse>
                </if>
                <if test="terms.createStart != null and terms.createStart !='' and terms.createEnd != null and terms.createEnd !=''">
                    and (DATE_FORMAT(${col.name},'%Y-%m-%d') <![CDATA[ >= ]]> <#noparse>#{</#noparse>terms.createStart<#noparse>}</#noparse>
                        and DATE_FORMAT(${col.name},'%Y-%m-%d') <![CDATA[ <= ]]> <#noparse>#{</#noparse>terms.createEnd<#noparse>}</#noparse>)
                </if>
                </#if>
                <#if (col.name == "update_time")>
                <if test="terms.${col.fieldName} != null and terms.${col.fieldName} !=''">
                    and DATE_FORMAT(${col.name},'%Y-%m-%d') = <#noparse>#{</#noparse>terms.${col.fieldName}<#noparse>}</#noparse>
                </if>
                <if test="terms.updateStart != null and terms.updateStart !='' and terms.updateEnd != null and terms.updateEnd !=''">
                    and (DATE_FORMAT(${col.name},'%Y-%m-%d') <![CDATA[ >= ]]> <#noparse>#{</#noparse>terms.updateStart<#noparse>}</#noparse>
                        and DATE_FORMAT(${col.name},'%Y-%m-%d') <![CDATA[ <= ]]> <#noparse>#{</#noparse>terms.updateEnd<#noparse>}</#noparse>)
                </if>
                </#if>
                <#if (col.name == "delete_status")>
                <if test="terms.${col.fieldName} = null and terms.${col.fieldName} =''">
                    and delete_status = 0
                </if>
                <if test="terms.${col.fieldName} != null and terms.${col.fieldName} !=''">
                    and ${col.name} = <#noparse>#{</#noparse>terms.${col.fieldName}<#noparse>}</#noparse>
                </if>
                </#if>
                </#list>
            </where>
        </if>
    </sql>
    <!-- 更新对象 -->
    <update id="update${className}">
        update
        <include refid="table-name"/>
        <set>
            <include refid="set-part"/>
        </set>
        <where>
            id = <#noparse>#{</#noparse>entity.id<#noparse>}</#noparse>
        </where>
    </update>
    <!-- 条件更新对象 -->
    <update id="update${className}Terms">
        update
        <include refid="table-name"/>
        <set>
            <include refid="set-part"/>
        </set>
        <include refid="where-part"/>
    </update>
    <!--  根据编号物理删除  -->
    <delete id="delete${className}">
        delete from
        <include refid="table-name" />
        where id = <#noparse>#{</#noparse>id<#noparse>}</#noparse>
    </delete>
    <!--  根据条件查询  -->
    <select id="listTerms" resultMap="dataResult">
        select
        <include refid="column-part"/>
        from
        <include refid="table-name" />
        <include refid="where-part"/>
    </select>
    <!--  根据条件统计  -->
    <select id="countTerms" resultType="java.lang.Long">
        select
        COUNT(1)
        from
        <include refid="table-name" />
        <include refid="where-part"/>
    </select>
    <!--  根据条件分页查询  -->
    <select id="pageTerms" resultMap="dataResult">
        SELECT
        <include refid="column-part"/>
        FROM
        <include refid="table-name" />
        <include refid="where-part"/>
        <if test="page.sort != null">
            <foreach collection="page.sort" item="s" index="index" separator="," open="order by ">
                isnull<#noparse>(${</#noparse>s.property<#noparse>}), ${</#noparse>s.property<#noparse>}</#noparse> <#noparse>${</#noparse>s.direction<#noparse>}</#noparse>
            </foreach>
        </if>
        <if test="page.sort == null">
            order by isnull(create_time), create_time desc
        </if>
        limit <#noparse>#{</#noparse>page.offset<#noparse>}</#noparse>, <#noparse>#{</#noparse>page.size<#noparse>}</#noparse>
    </select>

</mapper> 