上一节我们学习了JAVA里面的ORM框架JOOQ 这节我们使用JOOQ实现以下数据分页
首先看一张表


接下来有这样的需求
首先我们根据表进行分页

假设每页显示10条数据
接下来我们在查询分析器里写入sql语句
取出第一页前10条数据

select * from test_news ORDER BY id DESC LIMIT 0,10;
还可以这样写select * from test_news ORDER BY id DESC LIMIT 10;
取出第二页数据

两种方式都可以
取出第三页数据

以上分页在数据量小的时候可以这样做,如果数据量过大 这样做效率很低
所以需要对上面的sql语句做些优化
第一种方法
通过id加入子查询的方式来进行处理
我们以第二页为例

三种方式都为取出第二页数据
下面执行结果1,2,3都是相同的数据
取出第三页

那么sql语句在java代码中如何写呢
接下来我们可以来到JOOQ官网 搜索order by 或者 limit关键词
都有一些示例代码
接下来我们演示一下
由于我们创建了一张test_news新表
需要重新生成一下代码

执行这一句

将代码生成至此目录

由于sql里面需要用到一些函数,所以先看下这张图

接下来在MyDB里测试下代码

运行结果

接下来演示另外一种方法
实际上我们做前台页面一般不会这样写,因为性能还可以在高一些,可以把查询去掉

可以在第二页传入页码和lastId值 这样sql语句更加简便
例如

直接给个定值id小于定值 进行查询 更快速
这种方式需要程序和web页面的参数之间进行配合完成更进一步的优化
那在JOOQ里面还可以通过下面的方式实现上面的方法 只不过参数需要我们自己传

运行结果

我们还可以得到sql语句 并输出

运行结果

可以看出对基本运算进行了处理(大于 小于等)
网友评论