xufenglei
2018-01-30 24b5764532e012274759d71ed02844ad2eb901e4
src/main/resources/mapper/MonitorPointMapper.xml
@@ -1,21 +1,137 @@
<?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.moral.mapper.MonitorPointMapper" >
   <select id="getMonitorPointsByAreaName" resultType="com.moral.entity.MonitorPoint">
      SELECT
         mp.*
      FROM
         monitor_point mp,
         area a
      <if test="cityName != null">
         ,city c
      </if>
      WHERE
         mp.area_code = a.area_code
         AND a.area_name = #{areaName}
      <if test="cityName != null">
         AND c.city_name = #{cityName}
         AND mp.city_code = c.city_code
      </if>
   </select>
<?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.moral.mapper.MonitorPointMapper">
  <resultMap id="BaseResultMap" type="com.moral.entity.MonitorPoint">
    <id column="id" jdbcType="INTEGER" property="id" />
    <result column="name" jdbcType="VARCHAR" property="name" />
    <result column="longitude" jdbcType="REAL" property="longitude" />
    <result column="latitude" jdbcType="REAL" property="latitude" />
    <result column="province_code" jdbcType="INTEGER" property="provinceCode" />
    <result column="city_code" jdbcType="INTEGER" property="cityCode" />
    <result column="area_code" jdbcType="INTEGER" property="areaCode" />
    <result column="organization_id" jdbcType="INTEGER" property="organizationId" />
    <result column="address" jdbcType="VARCHAR" property="address" />
    <result column="is_delete" jdbcType="CHAR" property="isDelete" />
    <result column="description" jdbcType="VARCHAR" property="description" />
   <!-- 与省市县一对一的关系 -->
    <association property="areaNames" javaType="com.moral.entity.AreaNames">
     <result column="province_name" property="provinceName" jdbcType="VARCHAR" />
     <result column="city_name" property="cityName" jdbcType="VARCHAR" />
     <result column="area_name" property="areaName" jdbcType="VARCHAR" />
    </association>
     <association property="organization" javaType="com.moral.entity.Organization">
        <result column="organization_id" property="id" jdbcType="INTEGER" />
        <result column="organization_name" property="name" jdbcType="VARCHAR" />
     </association>
  </resultMap>
   <sql id="Example_Where_Clause">
      <where>
         <foreach collection="oredCriteria" item="criteria" separator="or">
            <if test="criteria.valid">
               <trim prefix="(" prefixOverrides="and" suffix=")">
                  <foreach collection="criteria.criteria" item="criterion">
                     <choose>
                        <when test="criterion.noValue">
                           and ${criterion.condition}
                        </when>
                        <when test="criterion.singleValue">
                           and ${criterion.condition} #{criterion.value}
                        </when>
                        <when test="criterion.betweenValue">
                           and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
                        </when>
                        <when test="criterion.listValue">
                           and ${criterion.condition}
                           <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
                              #{listItem}
                           </foreach>
                        </when>
                     </choose>
                  </foreach>
               </trim>
            </if>
         </foreach>
      </where>
   </sql>
   <sql id="Base_Column_List">
      id, name, longitude, latitude, province_code, city_code, area_code, organization_id,
      address, is_delete, description
   </sql>
   <sql id="Relation_Province_City_Area_List">
      are.area_name, cti.city_name, pro.province_name
   </sql>
   <select id="selectWithAreaNameByExample" parameterType="tk.mybatis.mapper.entity.Example" resultMap="BaseResultMap">
      select
      <if test="distinct">
         distinct
      </if>
      mpt.*      ,
      org.name as organization_name    ,
      <include refid="Relation_Province_City_Area_List" />
      from monitor_point mpt
      left join area are on mpt.area_code = are.area_code
      left join city cti on mpt.city_code = cti.city_code
      left join province pro on mpt.province_code = pro.province_code
      left join organization org on  mpt.organization_id = org.id
        where mpt.id in (
          select id from monitor_point
         <if test="_parameter != null">
            <include refid="Example_Where_Clause" />
         </if>
         <if test="orderByClause != null">
            order by ${orderByClause}
         </if>
      )
   </select>
   <select id="getMonitorPointsByAreaName" resultType="com.moral.entity.MonitorPoint">
      SELECT
         mp.*
      FROM
         monitor_point mp,
         area a
      <if test="cityName != null">
         ,city c
      </if>
      WHERE
         mp.area_code = a.area_code
         AND a.area_name = #{areaName}
      <if test="cityName != null">
         AND c.city_name = #{cityName}
         AND mp.city_code = c.city_code
      </if>
   </select>
   <select id="selectWithStateByMap" parameterType="java.util.Map" resultMap="BaseResultMap">
      SELECT mpt.*,MAX(dev.state) as state from monitor_point mpt
      LEFT JOIN device dev on dev.monitor_point_id = mpt.id
      <where>
         <if test="@com.moral.common.bean.Constants@isNotSpecialOrgId(orgId)">
            mpt.organization_id = #{orgId,jdbcType=VARCHAR}
         </if>
         <![CDATA[
         AND mpt.longitude < #{mapBounds.Ge,jdbcType=NUMERIC}
            AND mpt.longitude > #{mapBounds.Le,jdbcType=NUMERIC}
            AND mpt.latitude  < #{mapBounds.Fe,jdbcType=NUMERIC}
            AND mpt.latitude  > #{mapBounds.Ke,jdbcType=NUMERIC}
          and state<4
         GROUP BY mpt.`id`
            ]]>
      </where>
      UNION
      SELECT mpt.*,MAX(dev.state) as state from monitor_point mpt
      LEFT JOIN device dev on dev.monitor_point_id = mpt.id
      <where>
         <if test="@com.moral.common.bean.Constants@isNotSpecialOrgId(orgId)">
            mpt.organization_id = #{orgId,jdbcType=VARCHAR}
         </if>
         <![CDATA[
         AND mpt.longitude < #{mapBounds.Ge,jdbcType=NUMERIC}
            AND mpt.longitude > #{mapBounds.Le,jdbcType=NUMERIC}
            AND mpt.latitude  < #{mapBounds.Fe,jdbcType=NUMERIC}
            AND mpt.latitude  > #{mapBounds.Ke,jdbcType=NUMERIC}
          and state>3
         GROUP BY mpt.`id`
            ]]>
      </where>
   </select>
</mapper>