mybatis及hibernate下的MySQL和oracle数据库分页详解

本文详细讲解了在mybatis和hibernate框架下,如何针对MySQL和Oracle数据库进行分页操作。在mybatis中,MySQL利用内置的LIMIT关键字,而Oracle则需借助子查询实现。在hibernate中,无论是MySQL还是Oracle,都可以使用框架自带的方法设置每页显示条目数和起始索引。同时,文章还讨论了统一的业务处理方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mybatis下的分页

- MySQL

  • 因为MySQL自带 limit 关键字分页
/**
 起始索引start,结束索引end
 int pageIndex=1;//当前页数
 int countPage=3;//每页显示条目数
 int start=(pageIndex-1)×countPage;//每页的起始索引
 int end=countPage;//表示要显示的个数
 因为索引从0开始
 所以[start,end)=[0,3)
**/
@Select("select * from user_tab limit #{start},#{end}")
List<User>pageQuery(@Param("start")intstart,@Param("end")int end);

- Oracle

  • oracle没有limit分页所以通过子查询完成
1.排序起别名u (select * from user_tab order by id ) u
2.查询所有及伪列 (select u.*,rownum r from (select * from user_tab order by id ) u)
3.完成分页查询 select * fromselect u.*,rownum r from (select * from user_tab order by id ) u) where r<=#{1} and r>=#{0} 
//10固定值,届时自动匹配大小
例如start=3end=6则r<=3 and r>=6
start表示起始索引
end表示结束索引,也就是3-6和MySQL不同,end表示接下来显示几个

hibernate下的分页

- mysql

  • select * from user_tab limit #{start},#{end}
  • hibernate自带方法
    • query.setMaxResults(countPage);//每页显示条目数
    • query.setFirstResult((page-1)*countPage);//每页的第一个索引,hibernate索引从0开始算

- oracle

  • hibernate自带方法
    • query.setMaxResults(countPage);//每页显示条目数
    • query.setFirstResult((page-1)*countPage);//每页的第一个索引,hibernate索引从0开始算

统一业务处理

<div>
<a href="Emp_page?operation=Home">首页</a>&nbsp;
<a href="Emp_page?operation=PgUp">上一页</a>&nbsp;
<a href="Emp_page?operation=PgDn">下一页</a>&nbsp;
<a href="Emp_page?operation=End">尾页</a>
</div>
    private static int page = 1;//页标
    private int countPage= 3;//每页个数
    private int amount;//总条目
    private int pageCount;//总页数

    private String operation = "";//操作符

    pageCount = (amount % countPage) == 0 ? amount / countPage : amount / countPage + 1;

    switch (operation) {
        case "PgDn":
            System.out.println(operation);
            if (page <= pageCount)
                page++;
            if (page > pageCount)
                page = pageCount;
            break;
        case "PgUp":
            System.out.println(operation);
            if (page >= 1)
                page--;
            if (page <= 0)
                page = 1;
            break;
        case "Home":
            System.out.println(operation);
            page = 1;
            break;
        case "End":
            System.out.println(operation);
            page = pageCount;
            break;
        }

====================================================

欢迎指错

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值