分页查询项目里太多了,而这种分页查询,在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关键字大写,,,程序员基本素养、、、以上格式是有问题的==、

 

mybatis分页查询的万能模板的更多相关文章

  1. springmvc+spring+mybatis分页查询实例版本1,ver1.0

    无聊做做看看,几乎没有怎么仔细做过这方面的,总是以为很简单,想想就会,实际做起来结合工作经验感觉还是挺有收获的,可以用在自己的项目上 第一版本思路:框架使用ssm,这个无所谓,采用分页语句查询指定页面 ...

  2. JAVA入门[10]-mybatis分页查询

    1.添加分页插件 在mybatis-generator-config.xml添加plugin节点: <plugin type="org.mybatis.generator.plugin ...

  3. mybatis分页查询,SqlServer 2008 查询速度很慢

    一个业务场景,需要进行union查询: 查询速度非常慢,大概要37秒: 直接复制sql在数据库客户端执行,速度很快,由此可知是mybatis的原因,在网上搜索,可以配置fetchSize=" ...

  4. Mybatis分页查询与动态SQL

    一.Mybatis的分页查询 由于第一二节较为详细讲述了Mybatis的环境搭建,文件配置,SQL编写和Java代码实现,所以接下来的讲述都将只抽取关键代码和mapper文件中的关键sql,详细的流程 ...

  5. mybatis分页查询需要注意的问题

    一般对mybatis的分页查询的关键代码就两行: #currentPage代表当前页,pageSize代表每页的行数 PageHelper.startPage(currentPage, pageSiz ...

  6. spring boot +mybatis分页查询

    这是spring boot集合mybatis的分页查询. pom依赖: <!-- 分页插件 --> <dependency> <groupId>com.github ...

  7. 使用Oracle实现的MyBatis分页查询效果

    1.mybatis.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configur ...

  8. Mybatis 分页查询

    该篇博客记录采用pagehelper分页插件实现Mybatis分页功能 一.依赖 pom.xml <!-- pagehelper --> <dependency> <gr ...

  9. Mybatis分页查询total中的坑

    写在前面 今天用mybatis进行分页查询,大家应该都用过pageHelper这个插件,但是在计算总的数据数的时候,page.getTotal()总是返回0,要么就是返回pageSize(),今天给大 ...

随机推荐

  1. 1、docker容器技术基础入门

    Docker和传统虚拟机的区别               参考文章: https://lwn.net/Articles/531114/    操作中的命名空间详解 https://blog.yadu ...

  2. Linux 之CentOS7-VSFTP搭建

    环境 1.俩台Linux 虚拟机 Ser 和 Cli 安装 [root@jm ~]# rpm -ivh /mnt/Packages/vsftpd-3.0.2-10.el7.x86_64.rpm   / ...

  3. 如何只安装Postgresql client(以9.4 为例)

    Install the repository RPM: yum install https://download.postgresql.org/pub/repos/yum/9.4/redhat/rhe ...

  4. DAY 25多态、反射、异常处理

    一.面向对象与面向过程分析 1.print(len('123')) # 面向过程 #清晰知道操作的功能,但不能明确操作的具体对象,需要传入参数. 2.print('123'.__len__()) # ...

  5. [English] Time complexity wise this solution is the best among all

    Time complexity wise this solution is the best among all, we can do all operations in O(1) time. 时间复 ...

  6. SQL 基础学习(1):下载DB Browser for SQLite. 下载graphviz(为了使用Rails ERD的前提)出现❌,已debug.

    SQL is a standard language for storing, manipulating and retrieving data in databases. 关系型数据库:RDBMS( ...

  7. C# 抽象类和接口的差别

    抽象类和接口最终目的:抽象类实现多态化,接口实现功能化.比如汽车:接口就是轮子,发动机,车身等零部件,抽象类则是颜色,款式,型号等参数性东西. 抽象类(abstract): (1) 抽象方法只作声明, ...

  8. document.body.scrollTop和document.documentElement.scrollTop 以及值为0的问题

    转自http://wo13145219.iteye.com/blog/2001598 一.先遇到document.body.scrollTop值为0的问题 做页面的时候可能会用到位置固定的层,读取do ...

  9. redis 持久化文章分析的很到位

    https://baijiahao.baidu.com/s?id=1611955931705092609&wfr=spider&for=pc

  10. 用oracle自带的ssh脚本配置互信

    ./sshUserSetup.sh -user 用户名 -hosts "主机名1 主机名2 主机名3 ..." -advanced -noPromptPassphrase   这个 ...