<?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.pk)??> <#if field.autoInc=='true'> `${field.columnName}` ${field.sourceColumnType} NOT NULL auto_increment COMMENT '${field.remarks}', <#else > `${field.columnName}` ${field.sourceColumnType} NOT NULL COMMENT '${field.remarks}', </#if> <#else> `${field.columnName}` ${field.sourceColumnType} ${ (field.isNotNull == '是') ?string('NOT NULL','DEFAULT NULL')}<#if (field.defaultValue)??> default '${field.defaultValue}'</#if> COMMENT '${field.remarks}', </#if> </#list> PRIMARY KEY (`${pk}`) ) 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.attName}') or colPickMode == 1 and data.containsKey('${field.attName}')))"> a.${field.columnName} as ${field.columnName}, </if> </#list> </trim> </sql> <!-- 新增 --> <#if auto_inc=="true"> <insert id="insert" parameterType="${entityClassName}Entity" useGeneratedKeys="true" keyProperty="${pk}"> insert into ${sourceTableName} (<#list fields as field><#if field.columnName != "${pk}">${field.columnName}<#sep>,</#if></#list>) VALUES (<#list fields as field><#if field.columnName != "${pk}"><#noparse>#</#noparse>{${field.attName}}<#sep>,</#if></#list>) </insert> <!-- 批量新增 --> <insert id="insertBatch" parameterType="paramDto"> insert into ${sourceTableName} (<#list fields as field><#if field.columnName != "${pk}">${field.columnName}<#sep>,</#if></#list>) VALUES <foreach collection="data.dataList" item="item" index="index" separator="," > (<#list fields as field><#if field.columnName != "${pk}"><#noparse>#</#noparse>{item.${field.attName}}<#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.attName}}<#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.attName}}<#sep>,</#list>) </foreach> </insert> </#if> <!-- 根据ParamDto更新 --> <update id="update" parameterType="paramDto"> <#if isSubmeter??> update <#noparse>$</#noparse>{tableName} as a <#else> update ${sourceTableName} as a </#if> set <trim suffixOverrides="," suffix=""> <#list fields as field> <#if field.columnName != "id"> <if test="(colPickMode==0 and data.containsKey('${field.attName}')) or (colPickMode==1 and !data.containsKey('${field.attName}'))"> a.${field.columnName}=<#noparse>#</#noparse>{data.${field.attName}}, </if> <#if field.typeName == "java.lang.Integer"||field.typeName == "java.lang.Long"||field.typeName == "BigDecimal"> <if test="(colPickMode==0 and data.containsKey('${field.attName}Increment')) or (colPickMode==1 and !data.containsKey('${field.attName}Increment'))"> a.${field.columnName}=ifnull(a.${field.columnName},0) + <#noparse>#</#noparse>{data.${field.attName}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.attName}')) or (colPickMode==1 and !item.containsKey('${field.attName}'))"> when a.id=<#noparse>#</#noparse>{item.id} then <#noparse>#</#noparse>{item.${field.attName}} </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.attName}')) or (colPickMode==1 and !item.containsKey('${field.attName}'))"> when a.id=<#noparse>#</#noparse>{item.id} then <#noparse>#</#noparse>{item.${field.attName}} </when> <when test="(colPickMode==0 and item.containsKey('${field.attName}Increment')) or (colPickMode==1 and !item.containsKey('${field.attName}Increment'))"> when a.id=<#noparse>#</#noparse>{item.id} then ifnull(a.${field.columnName},0) + <#noparse>#</#noparse>{item.${field.attName}Increment} </when> </choose> </foreach> </trim> </#if> </#if> </#list> </trim> where ${pk} 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.${pk}=<#noparse>#</#noparse>{condition.id} </select> <!-- 根据主健删除 --> <delete id="deleteByKey" parameterType="paramDto"> delete a.* from ${sourceTableName} as a where a.${pk}=<#noparse>#</#noparse>{condition.id} </delete> <!-- 根据主健删除一批,针对单一主健有效 --> <delete id="deleteByKeys"> delete from ${sourceTableName} where ${pk} 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()"> <!-- 条件映射-普通条件 --> <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="<#noparse>${_conditionParam_}</#noparse>"/> <if test="conditionParamRef.containsKey('id')"> <if test="conditionParamRef.id != null"> <#noparse>${_conditionType_}</#noparse> a.${pk}=<#noparse>#{${_conditionParam_}.id}</#noparse> </if> </if> <#list fields as field> <#if field.typeName == "java.lang.Long"||field.typeName == "java.lang.Integer"||field.typeName == "BigDecimal"> <if test="conditionParamRef.containsKey('${field.attName}')"> <if test="conditionParamRef.${field.attName} != null "> <#noparse>${_conditionType_}</#noparse> a.${field.columnName} = <#noparse>#{${_conditionParam_}</#noparse>.${field.attName}} </if> <if test="conditionParamRef.${field.attName} == null"> <#noparse>${_conditionType_}</#noparse> a.${field.columnName} is null </if> </if> <if test="conditionParamRef.containsKey('${field.attName}List')"> <#noparse>${_conditionType_}</#noparse> a.${field.columnName} in <foreach collection="conditionParamRef.${field.attName}List" open="(" close=")" index="index" item="item" separator=","> <#noparse>#{item}</#noparse> </foreach> </if> <if test="conditionParamRef.containsKey('${field.attName}Start') and conditionParamRef.${field.attName}Start != null"> <#noparse>${_conditionType_}</#noparse> a.${field.columnName} <![CDATA[ >= ]]> <#noparse>#{${_conditionParam_}</#noparse>.${field.attName}Start} </if> <if test="conditionParamRef.containsKey('${field.attName}End') and conditionParamRef.${field.attName}End != null"> <#noparse>${_conditionType_}</#noparse> a.${field.columnName} <![CDATA[ <= ]]> <#noparse>#{${_conditionParam_}</#noparse>.${field.attName}End} </if> </#if> <#if field.typeName == "String"> <if test="conditionParamRef.containsKey('${field.attName}')"> <if test="conditionParamRef.${field.attName} != null and conditionParamRef.${field.attName} != ''"> <#noparse>${_conditionType_}</#noparse> a.${field.columnName} like <#noparse>#{${_conditionParam_}</#noparse>.${field.attName}} </if> <if test="conditionParamRef.${field.attName} == null"> <#noparse>${_conditionType_}</#noparse> a.${field.columnName} is null </if> </if> <if test="conditionParamRef.containsKey('${field.attName}List')"> <#noparse>${_conditionType_}</#noparse> a.${field.columnName} in <foreach collection="conditionParamRef.${field.attName}List" open="(" close=")" index="index" item="item" separator=","> <#noparse>#</#noparse>{item} </foreach> </if> </#if> <#if field.typeName == "java.util.Date"> <if test="conditionParamRef.containsKey('${field.attName}')"> <if test="conditionParamRef.${field.attName} != null "> <#noparse>$</#noparse>{_conditionType_} a.${field.columnName} = <#noparse>#{$</#noparse>{_conditionParam_}.${field.attName}} </if> <if test="conditionParamRef.${field.attName} == null"> <#noparse>$</#noparse>{_conditionType_} a.${field.columnName} is null </if> </if> <if test="conditionParamRef.containsKey('${field.attName}Start') and conditionParamRef.${field.attName}Start != null and conditionParamRef.${field.attName}Start!=''"> <#noparse>$</#noparse>{_conditionType_} a.${field.columnName} <![CDATA[ >= ]]> STR_TO_DATE(left(concat(<#noparse>#{$</#noparse>{_conditionParam_}.${field.attName}Start},' 00:00:00'),19),'%Y-%m-%d %k:%i:%s') </if> <if test="conditionParamRef.containsKey('${field.attName}End') and conditionParamRef.${field.attName}End != null and conditionParamRef.${field.attName}End!=''"> <#noparse>$</#noparse>{_conditionType_} a.${field.columnName} <![CDATA[ <= ]]> STR_TO_DATE(left(concat(<#noparse>#{$</#noparse>{_conditionParam_}.${field.attName}End},' 23:59:59'),19),'%Y-%m-%d %k:%i:%s') </if> </#if> </#list> </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.attName}')"> a.${field.columnName} <if test='orderCol.${field.attName} != null and "DESC".equalsIgnoreCase(orderCol.${field.attName})'>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>