【Mybatis】mybatis使用示例

BusinessAnalysisMapper.java

import com.chinamobile.epic.dao.model.PerformanceMetricAnalysis;
import com.chinamobile.epic.dao.model.PerformanceMetricAnalysisModel;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;


@Mapper
public interface BusinessAnalysisMapper {
    // 参考: BusinessStatisticMapper
    int deleteByPrimaryKey(PerformanceMetricAnalysisModel key);

    int insert(PerformanceMetricAnalysisModel record);

    /**
     * 批量插入数据(根据“表名后缀”插入)
     *
     * @param record
     * @param tableNameSuffix 表名后缀
     * @return
     */
    int insertBatch(@Param("list") List<PerformanceMetricAnalysisModel> record, @Param("tableNameSuffix") String tableNameSuffix);

    int insertSelective(PerformanceMetricAnalysisModel record);

    PerformanceMetricAnalysis selectByPrimaryKey(PerformanceMetricAnalysisModel key);

    int updateByPrimaryKeySelective(PerformanceMetricAnalysisModel record);

    int updateByPrimaryKey(PerformanceMetricAnalysisModel record);

    /**
     * 删除 startTime 之前的数据
     *
     * @param startTime
     * @param tableNameSuffix
     * @return
     */
    int deleteBeforeTime(@Param("createAt") Date startTime, @Param("tableNameSuffix") String tableNameSuffix);

    /**
     * 聚合查询
     *
     * @param tableName
     * @param funcToUse 对value求值时,使用的函数,如:avg,sum
     * @param startTime 查询的开始时间
     * @param endTime   查询的结束时间
     * @return
     */
    List<PerformanceMetricAnalysis> groupByDimensionIDAndIndicatorID(@Param("srcTableName") String tableName, @Param("func") String
            funcToUse, @Param("startTime") Date startTime, @Param("endTime") Date endTime);

    /**
     * 聚合查询:指标项为 {@code MetricDataType.Counter} 类型
     *
     * @param tableName
     * @param startTime
     * @param endTime
     * @param indicatorKeysOfCounter
     * @return
     */
    List<PerformanceMetricAnalysis> groupCounterDataByDimensionIndicator(@Param("srcTableName") String tableName, @Param("startTime")
            Date startTime, @Param("endTime") Date endTime, @Param("list") List<String> indicatorKeysOfCounter);

    /**
     * 聚合查询:指标项为 {@code MetricDataType.Gauge} 类型
     *
     * @param tableName
     * @param startTime
     * @param endTime
     * @param indicatorKeysOfGauge
     * @return
     */
    List<PerformanceMetricAnalysis> groupGaugeDataByDimensionIndicator(@Param("srcTableName") String tableName, @Param("startTime")
            Date startTime, @Param("endTime") Date endTime, @Param("list") List<String> indicatorKeysOfGauge);
}


BusinessAnalysisMapper.xml

<?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" >
<mapper namespace="com.chinamobile.epic.dao.mapper.BusinessAnalysisMapper">

    <resultMap id="BaseResultMap" type="com.chinamobile.epic.dao.model.PerformanceMetricAnalysis">
        <id column="dimension_id" property="dimensionId" jdbcType="CHAR"/>
        <id column="indicator_key" property="indicatorKey" jdbcType="VARCHAR"/>
        <id column="create_at" property="createAt" jdbcType="TIMESTAMP"/>
        <result column="pool_id" property="poolId" jdbcType="CHAR"/>
        <result column="value" property="value" jdbcType="DOUBLE"/>
        <result column="resource_type" property="resourceType" jdbcType="VARCHAR"/>
    </resultMap>

    <sql id="Base_Column_List">
        pool_id, dimension_id, indicator_key, value, resource_type, create_at
    </sql>

    <sql id="Base_Column_List_sumValue">
        pool_id, dimension_id, indicator_key, sum(value) as value, resource_type, create_at
    </sql>

    <sql id="Base_Column_List_avgValue">
        pool_id, dimension_id, indicator_key, avg(value) as value, resource_type, create_at
    </sql>

    <sql id="Base_Column_List_maxValue">
        pool_id, dimension_id, indicator_key,  max(value) as value, resource_type, create_at
    </sql>

    <sql id="Aggregation_Group_By">
        dimension_id, indicator_key
    </sql>

    <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="com.chinamobile.epic.dao.model.PerformanceMetricAnalysisModel">
        select
        <include refid="Base_Column_List"/>
        from performance_metirc_business_${tableNameSuffix}
        where dimension_id = #{dimensionId,jdbcType=CHAR}
        and indicator_key = #{indicatorKey,jdbcType=VARCHAR}
        and create_at = #{createAt,jdbcType=TIMESTAMP}
    </select>

    <select id="groupByDimensionIDAndIndicatorID" resultMap="BaseResultMap">
        select
        <if test='func=="avg"'>
            <include refid="Base_Column_List_avgValue"/>
        </if>
        <if test='func=="sum"'>
            <include refid="Base_Column_List_sumValue"/>
        </if>
        from ${srcTableName}
        where create_at &gt;= #{startTime,jdbcType=TIMESTAMP}
        and create_at &lt;= #{endTime,jdbcType=TIMESTAMP}
        GROUP BY
        <include refid="Aggregation_Group_By"/>
    </select>

    <!-- 这种方式可能不准确,应该使用求last的方式: 见下面-->
    <!--<select id="groupCounterDataByDimensionIndicator" resultMap="BaseResultMap">-->
    <!--select-->
    <!--<include refid="Base_Column_List_maxValue"/>-->
    <!--from ${srcTableName}-->
    <!--where create_at &gt;= #{startTime,jdbcType=TIMESTAMP}-->
    <!--and create_at &lt;= #{endTime,jdbcType=TIMESTAMP}-->
    <!--<choose>-->
    <!--<when test="list != null and list.size()>0">-->
    <!--and indicator_key in-->
    <!--<foreach collection="list" item="item" index="index" open="(" close=")" separator=",">-->
    <!--#{item,jdbcType=CHAR}-->
    <!--</foreach>-->
    <!--</when>-->
    <!--<otherwise>-->
    <!--and indicator_key in('Unknown')-->
    <!--</otherwise>-->
    <!--</choose>-->
    <!--GROUP BY-->
    <!--<include refid="Aggregation_Group_By"/>-->
    <!--</select>-->

    <select id="groupCounterDataByDimensionIndicator" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List"/>
        from
        (
        SELECT * FROM ${srcTableName}
        WHERE create_at &gt;= #{startTime,jdbcType=TIMESTAMP}
        and create_at &lt;= #{endTime,jdbcType=TIMESTAMP}
        <choose>
            <when test="list != null and list.size()>0">
                and indicator_key in
                <foreach collection="list" item="item" index="index" open="(" close=")" separator=",">
                    #{item,jdbcType=CHAR}
                </foreach>
            </when>
            <otherwise>
                and indicator_key in('Unknown')
            </otherwise>
        </choose>
        ORDER BY create_at DESC
        ) AS t
        GROUP BY
        <include refid="Aggregation_Group_By"/>
    </select>

    <select id="groupGaugeDataByDimensionIndicator" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List_avgValue"/>
        from ${srcTableName}
        where create_at &gt;= #{startTime,jdbcType=TIMESTAMP}
        and create_at &lt;= #{endTime,jdbcType=TIMESTAMP}
        <choose>
            <when test="list != null and list.size()>0">
                and indicator_key in
                <foreach collection="list" item="item" index="index" open="(" close=")" separator=",">
                    #{item,jdbcType=CHAR}
                </foreach>
            </when>
            <otherwise>
                and indicator_key in('Unknown')
            </otherwise>
        </choose>
        GROUP BY
        <include refid="Aggregation_Group_By"/>
    </select>

    <delete id="deleteByPrimaryKey" parameterType="com.chinamobile.epic.dao.model.PerformanceMetricAnalysisModel">
      delete from performance_metirc_business_${tableNameSuffix}
      where dimension_id = #{dimensionId,jdbcType=CHAR}
          and indicator_key = #{indicatorKey,jdbcType=VARCHAR}
          and create_at = #{createAt,jdbcType=TIMESTAMP}
  </delete>

    <delete id="deleteBeforeTime">
        delete from performance_metirc_business_${tableNameSuffix}
        where create_at &lt;= #{createAt,jdbcType=TIMESTAMP}
    </delete>

    <insert id="insert" parameterType="com.chinamobile.epic.dao.model.PerformanceMetricAnalysisModel">
       insert into performance_metirc_business_${tableNameSuffix} (dimension_id, indicator_key, create_at, pool_id, value, resource_type )
      values (#{dimensionId,jdbcType=CHAR}, #{indicatorKey,jdbcType=VARCHAR}, #{createAt,jdbcType=TIMESTAMP},
      #{poolId,jdbcType=CHAR}, #{value,jdbcType=DOUBLE}, #{resourceType,jdbcType=VARCHAR}
      )
  </insert>

    <insert id="insertBatch">
        insert into performance_metirc_business_${tableNameSuffix} (dimension_id, indicator_key, create_at, pool_id, value, resource_type )
        values
        <foreach collection="list" item="item" index="index" separator=",">
            (#{item.dimensionId,jdbcType=CHAR}, #{item.indicatorKey,jdbcType=VARCHAR}, #{item.createAt,jdbcType=TIMESTAMP},
            #{item.poolId,jdbcType=CHAR}, #{item.value,jdbcType=DOUBLE}, #{item.resourceType,jdbcType=VARCHAR} )
        </foreach>
    </insert>

    <insert id="insertSelective" parameterType="com.chinamobile.epic.dao.model.PerformanceMetricAnalysisModel">
        insert into performance_metirc_business_${tableNameSuffix}
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="poolId != null">
                pool_id,
            </if>
            <if test="dimensionId != null">
                dimension_id,
            </if>
            <if test="indicatorKey != null">
                indicator_key,
            </if>
            <if test="value != null">
                value,
            </if>
            <if test="resourceType != null">
                resource_type,
            </if>
            <if test="createAt != null">
                create_at,
            </if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="poolId != null">
                #{poolId,jdbcType=CHAR},
            </if>
            <if test="dimensionId != null">
                #{dimensionId,jdbcType=CHAR},
            </if>
            <if test="indicatorKey != null">
                #{indicatorKey,jdbcType=VARCHAR},
            </if>
            <if test="value != null">
                #{value,jdbcType=DOUBLE},
            </if>
            <if test="resourceType != null">
                #{resourceType,jdbcType=VARCHAR},
            </if>
            <if test="createAt != null">
                #{createAt,jdbcType=TIMESTAMP},
            </if>
        </trim>
    </insert>

    <update id="updateByPrimaryKeySelective" parameterType="com.chinamobile.epic.dao.model.PerformanceMetricAnalysisModel">
        update performance_metirc_business_${tableNameSuffix}
        <set>
            <if test="poolId != null">
                pool_id = #{poolId,jdbcType=CHAR},
            </if>
            <if test="value != null">
                value = #{value,jdbcType=DOUBLE},
            </if>
            <if test="resourceType != null">
                resource_type = #{resourceType,jdbcType=VARCHAR},
            </if>
        </set>
        where dimension_id = #{dimensionId,jdbcType=CHAR}
        and indicator_key = #{indicatorKey,jdbcType=VARCHAR}
        and create_at = #{createAt,jdbcType=TIMESTAMP}
    </update>

    <update id="updateByPrimaryKey" parameterType="com.chinamobile.epic.dao.model.PerformanceMetricAnalysisModel">
    update performance_metirc_business_${tableNameSuffix}
    set pool_id = #{poolId,jdbcType=CHAR},
      value = #{value,jdbcType=DOUBLE},
      resource_type = #{resourceType,jdbcType=VARCHAR}
    where dimension_id = #{dimensionId,jdbcType=CHAR}
      and indicator_key = #{indicatorKey,jdbcType=VARCHAR}
      and create_at = #{createAt,jdbcType=TIMESTAMP}
  </update>


</mapper>
原文地址:https://www.cnblogs.com/ssslinppp/p/7278232.html