分页查询项目里太多了,而这种分页查询,在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. Use SourceLink enables a great source debugging experience

    posts Exploring .NET Core's SourceLink - Stepping into the Source Code of NuGet packages you don't o ...

  2. 基于create-react-app的打包后文件路径问题

    改绝对路径为相对路径. https://segmentfault.com/q/1010000009672497直接在package.json里加 "homepage":" ...

  3. dao层、service和action的运用和区别

    DAO层叫数据访问层,全称为data access object,属于一种比较底层,比较基础的操作,对于数据库的操作,具体到对于某个表的增删改查, 也就是说某个DAO一定是和数据库的某一张表一一对应的 ...

  4. 记一次VM虚拟机Ubuntu无法联网问题

    突然ubuntu获取不到ipv4地址,手动设置静态ip也ping不通本机, 在网上试了一堆的方法也不行,就怀疑是vm设置问题了.因为 作业环境我的VM需要经常性的改变桥接的网卡,所以检查了一 下这里, ...

  5. Kotlin 泛型

    泛型,即 "参数化类型",将类型参数化,可以用在类,接口,方法上. 与 Java 一样,Kotlin 也提供泛型,为类型安全提供保证,消除类型强转的烦恼. 声明一个泛型类: cla ...

  6. chordDiagramFromMatrix()函数与circos.link()函数结合绘制箭头线

    chordDiagramFromMatrix(matp2,annotationTrack="grid",                       grid.col = c(re ...

  7. git 三步走

    git三步走: git add .        (注:别忘记后面的.,此操作是把Test文件夹下面的文件都添加进来) git commit  -m  "提交信息"  (注:“提交 ...

  8. prometheus相关文章

    prometheus book https://yunlzheng.gitbook.io/prometheus-book/ 开发自己的分布式监控Prometheus Exporter时遇到的坑 htt ...

  9. java网络编程小白教程

    1 网络编程 1.1 网络 把多台终端(计算机)通过物理线路连接起来,形成网络.便于交换数据.共享信息.组成更强大的逻辑体. 1.1.1 网络通信三要素 [1]IP地址:唯一标识网络上的每一台计算机 ...

  10. volley+okhttp封装,一行代码就可访问网络

    volley+okhttp封装,一行代码就可访问网络 前言: 我写这个可能不会完全的教会你去怎么封装一个网络框架,我的目的在于让你不需要你自己封装就可以访问网络,或者说互相学习也可以,我只是想让你大概 ...