工作中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,(如果不对统计对象进行限制,

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

所需数据。

<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
  (
  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>
时间: 2024-10-12 09:24:44

工作中Mabatis问题记录-两个实体具有一对多关系,根据一那个实体进行分页的相关文章

工作中碰到uploadify插件两个版本:HTML5和Flash

最近工作中碰到上传文件插件使用问题:在工作中碰到app嵌套html5页面中使用上传文件问题,因为之前使用的是stream上传插件(http://www.twinkling.cn/),但是该插件跨域传输出现问题,无法传输成功,经过几次调试都无法解决跨域,然后我就换了个插件uploadify,一开始用的flash版本,但是此版本不支持在app中使用,于是就想到了用html5版本的,感觉笨死了,这个问题整了时间有点长了,下面开始说html版本的使用 首先,页面代码: 后台代码: @SuppressWa

hibernate实体xml一对多关系映射

单向一对多关系映射: 一个房间对应多个使用者,也就是Room實例知道User實例的存在,而User實例則沒有意識到Room實例. 用户表: package onlyfun.caterpillar; public class User { private Long id; private String name; public User() {} public Long getId() { return id; } public void setId(Long id) { this.id = id

与linux 有关工作中遇到问题记录

1.库文件的添加 对于自己编译的程序(如:mysql) ,如何把自己编译的库文件位置告诉给系统,从而方便其他程序 的调用. 可以通过如下方法: 1)将编译程序生成库文件路径追加到ld.so.conf   或单独生成一个文件放到  ld.so.conf.d/  下面 echo "/usr/local/mysql/lib">>/etc/ld.so.conf ldconfig 2) 将编译生成的库文件链接到系统默认加载库文件路径中. for i in /usr/local/mys

工作中的小记录

1.radio在IE8中设置  display:none会造成无法选择的情况 解决办法 position: absolute; left:-99999px; 后发现在安卓UC上,按钮居然又出现了,靠边排着,后再加上一句 margin-left: -999999px; 2.浏览器重排与重绘 使用angular发现,在div(overflow:auto)内部套了个ng-repeat生成的table,在鼠标移到table内, 会发生卡住的现象,即滚轮滚动无响应,后发现调动浏览器大小,问题解决.于是在r

如何在工作中提升能力的启示

忘记是看到某本书还是某篇文章中写到的关于工作能力的论证,由于当时只记录在本子上了,为了持续保存,则摘录到博客中来. 工作中抽象出来的两种能力: 对如何影响他人的认知和执行能力. 建立理解和执行规范与体现的能力. 这是因为: 工作的意义是:通过(尝试)制定/执行某个系统来实习那事物效用的最大化,和(或)了解影响他人的方法,实现对他人认知.情绪.决策的影响. 工作中的抽象含量越高,复用性则越高> --得到复用能力. 核心素质的能力有这几个点:规范系统方向,数据分析,概念思维,写作能力. 希望看到的你

关于这周工作中遇到的关于缓存问题的记录

序:本周在工作中遇到了一些麻烦,解决过程比较曲折和辛苦,特此记录,留作经验供以后参考 发现问题:周一上班的时候,运营打电话来说,我们上个月做的一个活动感觉数据不对,商家过来投诉了.结果我数据库一查,数据还真有问题!这次的活动采用的是页面上使用缓存系统显示活动数值(总金额),同时在后台记录详细的每条活动数据的办法.每次用户发生业务行为的时候都会在后台的缓存的总金额上增加,同时记录这次行为发生的金额数.结果我周一把数据库的记录加一起来一算,发现和页面上缓存的总金额竟然差了将近一半! 解决的过程: 1

工作中常用Linux命令记录

在工作中我们会用到各种各样的命令来满足我们工作的需要,再次以博文的方式记录一下.一天记录一条吧. 一.ls    列出所在目录的文件 -1    以列表的形式显示. -t    按照时间的方式排序一般与l一起使用.  ls与dir的区别是怎么样的平时没有注意过,有哪位网友平时研究过可以分享一下.

工作中接触到的框架记录了解【网络文章翻译】

Backbone.js 优点:强大的社区和大量的势头. Underscore.js也是一个伟大的框架. 缺点:缺乏坚强的抽象和令人不满意.整个框架是出奇的轻巧,导致大量的样板.一个程序越大,这情况就越明显. Knockout.js 是一个MVVM框架,从它的支持者受到的好评很多.它强调声明UI绑定和自动更新用户界面. 优点:绑定的支持.大文件和惊人的导师制. 缺点:尴尬的绑定语法,缺乏坚实的视图组件层次结构.我想能够轻松地重复使用的组件.我也觉得像识别为MVVM框架是有害的.几乎没有这些框架的任

记录下工作中使用的pdf.js

在工作中遇到一个通过网页的形式浏览pdf文件以及图片的需求,图片简单,直接通过网页的形式打开这个图片的URL即可.而pdf这边,通过查询发现有一个名为pdf.js的神器. 简单介绍下,它可以在html中直接浏览pdf文件,pdf的每一页数据,通过H5的canvas进行解析,以及显示.其中还可以操作页数.滚动.打印.下载等功能.git上的地址为:http://mozilla.github.io/pdf.js/ 网上的文档资料很多,就不记录了,直接留存通用代码. <!DOCTYPE html> &