zoukankan      html  css  js  c++  java
  • mybatis分页查询的万能模板

    分页查询项目里太多了,而这种分页查询,在mybatis里面的配置几乎一模一样,今天就整理一个比较好和实用的模板,供以后直接Ctrl+C

    <select id="queryMember" resultMap="MemberInfoMap">
        select *
          from (
                select ROW_NUMBER() over(order by m.create_time) page,
                       m.*,
                       T.TEAM_NAME
                  from MC_MEMBER m
                  left join MC_TEAM T on T.ID = M.TEAM_ID
                 <include refid="member_where" />
                ) r
         where R.PAGE > (#{query.pageNo} - 1) * #{query.pageSize}
           and R.PAGE &lt;= #{query.pageNo} * #{query.pageSize}
      </select>
      
      <sql id="member_where" >
        <where> 
            <if test="query.id != null and query.id != '-999'">
                m.ID = #{query.id}
            </if>
            <if test="query.name != null and query.name != '-999'">
                AND m.NAME = #{query.name}
            </if>
            <if test="query.mobile != null and query.mobile != '-999'">
                AND m.MOBILE = #{query.mobile}
            </if>
            <if test="query.teamId != null and query.teamId != '-999'">
                AND m.TEAM_ID = #{query.teamId}
            </if>
            <if test="query.beginTime != null and query.beginTime != 0" >
               and s.begin_date >= (#{query.beginTime} / (1000 * 60 * 60 * 24) +  TO_DATE('1970-01-01', 'YYYY-MM-DD'))
            </if>
            <if test="query.endTime != null and query.endTime != 0">
               and s.end_date &lt;= (#{query.endTime} / (1000 * 60 * 60 * 24) +  TO_DATE('1970-01-01', 'YYYY-MM-DD'))
            </if>
            <if test="query.keyWord != null and query.keyWord != ''">
               and (s.NAME like '%${query.keyWord}%' 
                 or s.EMPLOYEE_NO like '%${query.keyWord}%')
            </if>
        </where>
      </sql>

    有几个需要注意的点提一下:

    1、子查询里面的  ROW_NUMBER() over(order by m.create_time) page,可以进一步利用强大的over()函数,进行排序,甚至分组

    2、query.pageNo的最小值(即首页),应该从 1 开始

    3、<include refid="member_where" /> where的整个条件都放在里面,可以看到原sql里没有where关键字了,而在<sql> 里面用到了<where>标签,具体可参阅mybatis官网的相关文档,这样方便,看起来也舒服

    4、if 里面的判断条件,应根据 参数类型 和 实际默认值 选择是"-999"、0、""(即空字符串)还是别的,另外,有些情况需要将if 里面的 != 改成 == 才执行里面的条件,看自己实际需求

    5、这里过滤时间的if,传入的是 时间戳 形式的(即整数形式),这种处理是比较简洁的一种

    6、最后一个if 是模糊查询,也是可以的,关于模糊查询可以度娘(总是记不住)

    7、最后最后提一下,sql格式,即sql关键字对齐,和非sql关键字大写,,,程序员基本素养、、、以上格式是有问题的==、

     
  • 相关阅读:
    (转)Shell中read的用法详解
    How to install OpenResty
    MYSQL随机抽取查询 MySQL Order By Rand()效率问题
    NGINX、PHP-FPM开机自动启动
    Nginx和PHP-FPM的启动/重启脚本 [转发]
    绕过 <?PHP exit('Access Denied'); ?> 限制
    OpenResty(Nginx)+Lua+GraphicsMagick实现缩略图功能
    ImageMagick资料
    MySQL5.5 RPM安装的默认安装路径
    PHP编译支持mysqli
  • 原文地址:https://www.cnblogs.com/zz-3m23d-begining/p/8393820.html
Copyright © 2011-2022 走看看