sqlMapTwo.ftl 14.5 KB
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"mybatis-3-mapper.dtd">
<mapper namespace="${entityPackageName}.dao.ibatis.${entityClassName}DaoImpl">

    <!-- 字段和属性映射 -->
    <resultMap type="${entityClassName}Entity" id="${entityClassName}Entity-Map">
        <#list fields as field>
        <result property="${field.attName}" column="${field.columnName}" />
        </#list>
    </resultMap>
    <#if isSubmeter??>
    <update id="createTable" parameterType="paramDto">
        CREATE TABLE `<#noparse>$</#noparse>{tableName}`(
        <#list fields as field>
        <#if field.columnName == "id">
        `id` bigint(20) NOT NULL  ${field.autoInc!""}  COMMENT '${field.remarks}',
        <#else >
        <#if field.typeName == "String">
        `${field.columnName}` ${field.sourceColumnType} CHARACTER SET utf8 COLLATE utf8_general_ci ${ (field.isNotNull == '是') ?string('NOT NULL','NULL DEFAULT NULL')} COMMENT '${field.remarks}',
        <#else >
        `${field.columnName}` ${field.sourceColumnType} ${ (field.isNotNull == '是') ?string('NOT NULL','NULL DEFAULT NULL')}  COMMENT '${field.remarks}',
        </#if>
        </#if>
        </#list>
        PRIMARY KEY  (`id`)
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='${entityPackageDesc}';

    </update>
    </#if>

    <!-- 表所有列 -->
    <sql id="_columns">
        <trim suffixOverrides="," suffix="">
            <#list fields as field>
                <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('${field.columnName}') or colPickMode == 1 and data.containsKey('${field.columnName}')))">
                    a.${field.columnName} as ${field.columnName},
                </if>
            </#list>
        </trim>
    </sql>
    <!-- 新增 -->
    <#if auto_inc=="true">
    <insert id="insert" parameterType="${entityClassName}Entity" useGeneratedKeys="true" keyProperty="id">
        insert into ${sourceTableName}
        (<#list fields as field><#if field.columnName != "id">${field.columnName}<#sep>,</#if></#list>)
        VALUES
        (<#list fields as field><#if field.columnName != "id"><#noparse>#</#noparse>{${field.columnName}}<#sep>,</#if></#list>)
    </insert>
    <!-- 批量新增 -->
    <insert id="insertBatch" parameterType="paramDto">
        insert into ${sourceTableName}
        (<#list fields as field><#if field.columnName != "id">${field.columnName}<#sep>,</#if></#list>)
        VALUES
        <foreach collection="data.dataList" item="item" index="index" separator="," >
            (<#list fields as field><#if field.columnName != "id"><#noparse>#</#noparse>{item.${field.columnName}}<#sep>,</#if></#list>)
        </foreach>
    </insert>
    <#else>
    <insert id="insert" parameterType="${entityClassName}Entity" >
        insert into ${sourceTableName}
        (<#list fields as field>${field.columnName}<#sep>,</#list>)
        VALUES
        (<#list fields as field><#noparse>#</#noparse>{${field.columnName}}<#sep>,</#list>)
    </insert>
    <!-- 批量新增 -->
    <insert id="insertBatch" parameterType="paramDto">
        insert into ${sourceTableName}
        (<#list fields as field>${field.columnName}<#sep>,</#list>)
        VALUES
        <foreach collection="data.dataList" item="item" index="index" separator="," >
            (<#list fields as field><#noparse>#</#noparse>{item.${field.columnName}}<#sep>,</#list>)
        </foreach>
    </insert>
    </#if>
    <!-- 根据ParamDto更新 -->
    <update id="update" parameterType="paramDto">
        update ${sourceTableName} as a
        set
        <trim suffixOverrides="," suffix="">
        <#list fields as field>
        <#if field.columnName != "id">
            <if test="(colPickMode==0 and data.containsKey('${field.columnName}')) or (colPickMode==1 and !data.containsKey('${field.columnName}'))">
                a.${field.columnName}=<#noparse>#</#noparse>{data.${field.columnName}},
            </if>
            <#if field.typeName == "java.lang.Integer"||field.typeName == "java.lang.Long"||field.typeName == "BigDecimal">
            <if test="(colPickMode==0 and data.containsKey('${field.columnName}Increment')) or (colPickMode==1 and !data.containsKey('${field.columnName}Increment'))">
                a.${field.columnName}=ifnull(a.${field.columnName},0) + <#noparse>#</#noparse>{data.${field.columnName}Increment},
            </if>
            </#if>
        </#if>
        </#list>
        </trim>
        <trim suffixOverrides="where" suffix="">
            where
            <trim prefixOverrides="and" prefix="">
                <include refid="_condition_"/>
            </trim>
        </trim>
    </update>
    <!-- 批量更新 -->
    <update id="updateBatch" parameterType="paramDto">
        update ${sourceTableName} as a
        <trim prefix="set" suffixOverrides=",">
            <#list fields as field>
                <#if field.columnName != "id">
                     <#if field.typeName == "String"||field.typeName == "java.util.Date">
                <trim prefix="${field.columnName}=(case" suffix="ELSE ${field.columnName} end),">
                    <foreach collection="data.dataList" item="item" index="index" separator="" >
                        <if test="(colPickMode==0 and item.containsKey('${field.columnName}')) or (colPickMode==1 and !item.containsKey('${field.columnName}'))">
                            when a.id=<#noparse>#</#noparse>{item.id} then <#noparse>#</#noparse>{item.${field.columnName}}
                        </if>
                    </foreach>
                </trim>
                     </#if>
                    <#if field.typeName == "java.lang.Integer"||field.typeName == "java.lang.Long"||field.typeName == "BigDecimal">
                        <trim prefix="${field.columnName}=(case" suffix="ELSE ${field.columnName} end),">
                            <foreach collection="data.dataList" item="item" index="index" separator="" >
                                <choose>
                                    <when test="(colPickMode==0 and item.containsKey('${field.columnName}')) or (colPickMode==1 and !item.containsKey('${field.columnName}'))">
                                        when a.id=<#noparse>#</#noparse>{item.id} then <#noparse>#</#noparse>{item.${field.columnName}}
                                    </when>
                                    <when test="(colPickMode==0 and item.containsKey('${field.columnName}Increment')) or (colPickMode==1 and !item.containsKey('${field.columnName}Increment'))">
                                        when a.id=<#noparse>#</#noparse>{item.id} then ifnull(a.${field.columnName},0) + <#noparse>#</#noparse>{item.${field.columnName}Increment}
                                    </when>
                                </choose>
                            </foreach>
                        </trim>
                    </#if>
                </#if>
            </#list>
        </trim>
        where id in
        <foreach collection="data.dataList" item="item" index="index" open="(" separator="," close=")">
            <#noparse>#</#noparse>{item.id}
        </foreach>
    </update>
    <!-- 根据主健查询 -->
    <select id="getByKey" parameterType="paramDto" resultMap="${entityClassName}Entity-Map">
        select <include refid="_columns"/>
        from ${sourceTableName} as a
        where a.id=<#noparse>#</#noparse>{condition.id}
    </select>
    <!-- 根据主健删除 -->
    <delete id="deleteByKey" parameterType="paramDto">
        delete a.* from ${sourceTableName} as a where a.id=<#noparse>#</#noparse>{condition.id}
    </delete>
    <!-- 根据主健删除一批,针对单一主健有效 -->
    <delete id="deleteByKeys">
        delete from ${sourceTableName} where id in
        <foreach collection="array" item="item" index="index" open="(" separator="," close=")">
            <#noparse>#</#noparse>{item}
        </foreach>
    </delete>
    <!-- 根据paramDto删除一批 -->
    <delete id="deleteByMap" parameterType="paramDto">
        delete a.* from ${sourceTableName} as a
        <trim suffixOverrides="where" suffix="">
            where
            <trim prefixOverrides="and" prefix="">
                <include refid="_condition_"/>
            </trim>
        </trim>
    </delete>
    <!-- 获取列表 -->
    <select id="getList" parameterType="paramDto" resultMap="${entityClassName}Entity-Map">
        select <include refid="_columns"/>
        from ${sourceTableName} 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 ${sourceTableName} 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()">
            <#list fields as field>
                <#if field.typeName == "java.lang.Long"||field.typeName == "java.lang.Integer"||field.typeName == "BigDecimal">
                    <if test="condition.containsKey('${field.columnName}')">
                        <if test="condition.${field.columnName} != null ">
                            and a.${field.columnName} = <#noparse>#</#noparse>{condition.${field.columnName}}
                        </if>
                        <if test="condition.${field.columnName} == null">
                            and a.${field.columnName} is null
                        </if>
                    </if>
                    <if test="condition.containsKey('${field.columnName}List')">
                        and a.${field.columnName} in
                        <foreach collection="condition.${field.columnName}List" open="(" close=")" index="index" item="item" separator=",">
                            <#noparse>#{item}</#noparse>
                        </foreach>
                    </if>
                    <if test="condition.containsKey('${field.columnName}Start') and condition.${field.columnName}Start != null">
                        <![CDATA[ and a.${field.columnName} >= <#noparse>#</#noparse>{condition.${field.columnName}Start} ]]>
                    </if>
                    <if test="condition.containsKey('${field.columnName}End') and condition.${field.columnName}End != null">
                        <![CDATA[ and a.${field.columnName} <= <#noparse>#</#noparse>{condition.${field.columnName}End} ]]>
                    </if>

                </#if>
                <#if field.typeName == "String">
                    <if test="condition.containsKey('${field.columnName}')">
                        <if test="condition.${field.columnName} != null and condition.${field.columnName} != ''">
                            and a.${field.columnName} like <#noparse>#</#noparse>{condition.${field.columnName}}
                        </if>
                        <if test="condition.${field.columnName} == null">
                            and a.${field.columnName} is null
                        </if>
                    </if>
                    <if test="condition.containsKey('${field.columnName}List')">
                        and a.${field.columnName} in
                        <foreach collection="condition.${field.columnName}List" open="(" close=")" index="index" item="item" separator=",">
                            <#noparse>#{item}</#noparse>
                        </foreach>
                    </if>
                </#if>
                <#if field.typeName == "java.util.Date">
                    <if test="condition.containsKey('${field.columnName}')">
                        <if test="condition.${field.columnName} != null ">
                            and a.${field.columnName} = <#noparse>#</#noparse>{condition.${field.columnName}}
                        </if>
                        <if test="condition.${field.columnName} == null">
                            and a.${field.columnName} is null
                        </if>
                    </if>
                    <if test="condition.containsKey('${field.columnName}Start') and condition.${field.columnName}Start != null and condition.${field.columnName}Start!=''">
                        <![CDATA[ and a.${field.columnName} >= STR_TO_DATE(left(concat(<#noparse>#</#noparse>{condition.${field.columnName}Start},' 00:00:00'),19),'%Y-%m-%d %k:%i:%s') ]]>
                    </if>
                    <if test="condition.containsKey('${field.columnName}End') and condition.${field.columnName}End != null and condition.${field.columnName}End!=''">
                        <![CDATA[ and a.${field.columnName} <= STR_TO_DATE(left(concat( <#noparse>#</#noparse>{condition.${field.columnName}End},' 23:59:59'),19),'%Y-%m-%d %k:%i:%s') ]]>
                    </if>
                </#if>
            </#list>
        </if>
    </sql>


    <sql id="_orderCols_">
<#--        <if test="orderColList != null and !orderColList.isEmpty()">-->
<#--            order by-->
<#--            <trim suffixOverrides=","  suffix="">-->
<#--                <foreach collection="orderColList" open="" close="" index="index" item="item" separator=",">-->
<#--                    <#noparse> #{item.colName} #{item.sortKind}</#noparse>-->
<#--                </foreach>-->
<#--            </trim>-->
<#--        </if>-->
        <if test="(orderColList == null or orderColList.isEmpty()) and orderCol != null and !orderCol.isEmpty()">
            order by
            <trim suffixOverrides=","  suffix="">
                <#list fields as field>
                    <if test="orderCol.containsKey('${field.columnName}') ">
                        a.${field.columnName}
                        <if test="orderCol.${field.columnName}!= null and orderCol.${field.columnName}== 'desc'" >
                            desc
                        </if>
                        ,
                    </if>
                </#list>
            </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=",">-->
<#--                    <#noparse>#</#noparse>{item}-->
<#--                </foreach>-->
<#--            </trim>-->
<#--        </if>-->
<#--    </sql>-->
</mapper>