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关键字大写,,,程序员基本素养、、、以上格式是有问题的==、

     
  • 相关阅读:
    LeetCode 109 Convert Sorted List to Binary Search Tree
    LeetCode 108 Convert Sorted Array to Binary Search Tree
    LeetCode 107. Binary Tree Level Order Traversal II
    LeetCode 106. Construct Binary Tree from Inorder and Postorder Traversal
    LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal
    LeetCode 103 Binary Tree Zigzag Level Order Traversal
    LeetCode 102. Binary Tree Level Order Traversal
    LeetCode 104. Maximum Depth of Binary Tree
    接口和多态性
    C# 编码规范
  • 原文地址:https://www.cnblogs.com/zz-3m23d-begining/p/8393820.html
Copyright © 2011-2022 走看看