zoukankan      html  css  js  c++  java
  • 工作中Mabatis问题记录-两个实体具有一对多关系,根据一那个实体进行分页

    <sql id="limit">
      <if test='offset != 0 and limit != 0'>
        LIMIT #{offset}, #{limit}
      </if>
    
      <if test='offset == 0 and limit != 0'>
        LIMIT #{limit}
      </if>
    </sql>
      <resultMap id="queryPointInfosMap" type="com..gs.stat.service.bean.QueryPointInfo">
        <result column="project_id" jdbcType="INTEGER" property="projectId" />
        <result column="city_name" jdbcType="VARCHAR" property="cityName" />
        <result column="region_name" jdbcType="VARCHAR" property="regionName" />
        <result column="project_name" jdbcType="VARCHAR" property="projectName" />
        <result column="point_name" jdbcType="VARCHAR" property="statPointName" />
        <result column="point_status" jdbcType="TINYINT" property="statPointstatus" />
        <result column="photo_front" jdbcType="VARCHAR" property="photoFront" />
        <result column="photo_left" jdbcType="VARCHAR" property="photoLeft" />
        <result column="photo_right" jdbcType="VARCHAR" property="photoRight" />
        <result column="notes" jdbcType="VARCHAR" property="notes" />
      </resultMap>
    <sql id="where">
        <where>
          AND x.is_deleted=0 and y.is_deleted=0
          <if test="cityName != null and cityName != ''"> AND m.name=#{cityName}</if>
          <if test="regionName != null and regionName != ''"> AND z.name=#{regionName}</if>
          <if test="projectName != null and projectName != ''"> AND y.name=#{projectName}</if>
          <if test="updatedTimeBegin != null and updatedTimeBegin != ''">
            AND  date_format(x.updated_time, '%Y-%m-%d') <![CDATA[>=]]> #{updatedTimeBegin}
          </if>
          <if test="updatedTimeEnd != null and updatedTimeEnd != ''">
            AND date_format(x.updated_time, '%Y-%m-%d') <![CDATA[<=]]> #{updatedTimeEnd}
          </if>
          /*status=2,则全部查询,0:可用,1:不可用*/
          <if test="status !=null and status !=2 ">AND x.status = #{status}</if>
        </where>
      </sql>

     统计对象和统计点是一对多的关系,在页面上要实现根据统计对象进行分页、分组,所以要先找到分页中所有的满足条件的统计对象的id,(如果不对统计对象进行限制,

    可能在分页中找到固定的数目的统计对象不满足其他的限制,每页的数据条数就不是固定的了,)然后再查找满足条件的

    所需数据。这条sql是查找原始数据,为了提高查询效率对数据分组的部分放到程序中处理了。

    <select id="queryPointInfoList" parameterType="com..gs.stat.service.param.QueryPointInfoParam" resultMap="queryPointInfosMap">
      select y.id project_id,m.name city_name,z.name region_name,y.name project_name,x.name point_name,
      x.status point_status,photo_front,photo_left,photo_right,notes from project_info y
      inner join stat_point_info x on x.project_id = y.id
      inner join region_info z on y.region_id = z.id
      inner join city_info m on z.city_id = m.id
      <where>
      y.id in (//先找到分页中所有的满足条件的统计对象的id
      select t.projectId from
      (/*IN里不支持LIMIT,所以需要再嵌套一层,详见参考文献【1】*/
      SELECT distinct y.id projectId from project_info y
      INNER join stat_point_info x on x.project_id = y.id
      inner join region_info z on y.region_id = z.id
      inner join city_info m on z.city_id = m.id
      <include refid="where"/>
      <include refid="limit"/>
      ) as t
      )
        AND x.is_deleted=0 and y.is_deleted=0
        <if test="cityName != null and cityName != ''"> AND m.name=#{cityName}</if>
        <if test="regionName != null and regionName != ''"> AND z.name=#{regionName}</if>
        <if test="projectName != null and projectName != ''"> AND y.name=#{projectName}</if>
        <if test="updatedTimeBegin != null and updatedTimeBegin != ''">
          AND  date_format(x.updated_time, '%Y-%m-%d') <![CDATA[>=]]> #{updatedTimeBegin}
        </if>
        <if test="updatedTimeEnd != null and updatedTimeEnd != ''">
          AND date_format(x.updated_time, '%Y-%m-%d') <![CDATA[<=]]> #{updatedTimeEnd}
        </if>
        /*status=2,则全部查询,0:可用,1:已关闭*/
        <if test="status !=null and status !=2 ">AND x.status = #{status}</if>
      </where>
    </select>

    【1】:http://www.jb51.net/article/46209.htm

  • 相关阅读:
    说明因 Active Directory 冲突导致的 NTDS 复制警告 ID 1083 和 1061 以及 SAM 错误 ID 12294
    KB817701:可用于解决帐户锁定问题的 Service Pack 和修复程序
    log check
    AD account 锁定问题
    VS.2005 中比较有用的快捷键
    用户帐户意外锁定, 以及 Windows Server 2003 中记录事件 ID 12294
    xp 重新安装MDAC
    [学习收藏]业界三种架构优缺点比较
    [收藏学习]Linux内核虚拟机 学习KVM架构及其优点
    两个命令:hdparm和iozone参数解释
  • 原文地址:https://www.cnblogs.com/Allen-win/p/8004669.html
Copyright © 2011-2022 走看看