分页的三种方式

实现方式 优点 缺点 适用场景
subList 简单、易用 效率低 无法按需批量获取数据
SQL语句 简单、直接、效率高 数据库兼容性差 不要求数据库兼容
Hibernate框架 面向对象,兼容性强 复杂查询性能低 兼容不同数据库

一.借助数组进行分页

  • 原理:进行数据库查询操作时,获取到数据库中所有满足条件的记录,保存在应用的临时数组中,再通过List的subList方法,获取到满足条件的所有记录。

  • 实现:

首先在dao层,创建StudentMapper接口,用于对数据库的操作。在接口中定义通过数组分页的查询方法,如下所示:

List queryStudentsByArray();
方法很简单,就是获取所有的数据,通过list接收后进行分页操作。

创建StudentMapper.xml文件,编写查询的sql语句:

 <select id="queryStudentsByArray"  resultMap="studentmapper">
        select * from student
 </select>

可以看出再编写sql语句的时候,我们并没有作任何分页的相关操作。这里是查询到所有的学生信息。

接下来在service层获取数据并且进行分页实现:

定义IStuService接口,并且定义分页方法:

List<Student> queryStudentsByArray(int currPage, int pageSize);

通过接收currPage参数表示显示第几页的数据,pageSize表示每页显示的数据条数。

创建IStuService接口实现类StuServiceIml对方法进行实现,对获取到的数组通过currPage和pageSize进行分页:

 @Override
    public List<Student> queryStudentsByArray(int currPage, int pageSize) {
        List<Student> students = studentMapper.queryStudentsByArray();
//        从第几条数据开始
        int firstIndex = (currPage - 1) * pageSize;
//        到第几条数据结束
        int lastIndex = currPage * pageSize;
        return students.subList(firstIndex, lastIndex);
    }

通过subList方法,获取到两个索引间的所有数据。

最后在controller中创建测试方法:

  @ResponseBody
    @RequestMapping("/student/array/{currPage}/{pageSize}")
    public List<Student> getStudentByArray(@PathVariable("currPage") int currPage, @PathVariable("pageSize") int pageSize) {
        List<Student> student = StuServiceIml.queryStudentsByArray(currPage, pageSize);
        return student;
    }

通过用户传入的currPage和pageSize获取指定数据。


二.借助Sql语句进行分页

在了解到通过数组分页的缺陷后,我们发现不能每次都对数据库中的所有数据都检索。然后在程序中对获取到的大量数据进行二次操作,这样对空间和性能都是极大的损耗。所以我们希望能直接在数据库语言中只检索符合条件的记录,不需要在通过程序对其作处理。这时,Sql语句分页技术横空出世。

实现:通过sql语句实现分页也是非常简单的,只是需要改变我们查询的语句就能实现了,即在sql语句后面添加limit分页语句。

  • 首先还是在StudentMapper接口中添加sql语句查询的方法,如下:

List queryStudentsBySql(Map<String,Object> data);
然后在StudentMapper.xml文件中编写sql语句通过limiy关键字进行分页:

<select id="queryStudentsBySql" parameterType=
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PageHelper是一个用于实现分页的开源工具,基于MyBatis进行开发。使用PageHelper可以方便地进行数据库查询结果的分页处理。 要使用PageHelper,首先需要在项目的配置文件中添加对应的依赖。例如在Maven项目中,可以在pom.xml文件中添加如下依赖: ```xml <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.1.11</version> </dependency> ``` 添加依赖后,在MyBatis的配置文件中配置PageHelper插件,具体配置方式如下: ```xml <plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <property name="dialect" value="mysql"/> </plugin> </plugins> ``` 配置完成后,就可以在需要进行分页查询的地方直接使用PageHelper来实现分页了。例如,在Java代码中进行分页查询的示例: ```java import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; public class MyService { public List<User> getUsers(int pageNum, int pageSize) { // 在需要分页的查询前调用PageHelper.startPage方法 PageHelper.startPage(pageNum, pageSize); // 执行数据库查询操作 List<User> userList = userDao.getUsers(); // 使用PageInfo对查询结果进行包装 PageInfo<User> pageInfo = new PageInfo<>(userList); // 获取分页后的结果 List<User> pagedUserList = pageInfo.getList(); return pagedUserList; } } ``` 上述代码中,先调用PageHelper.startPage方法设置分页参数,然后执行数据库查询操作,最后使用PageInfo对查询结果进行包装。通过PageInfo可以获取到分页后的结果数据。 需要注意的是,PageHelper支持多种数据库分页查询,可以根据实际情况在配置文件中设置相应的数据库方言。 这就是使用PageHelper实现分页的简单示例。通过PageHelper,可以方便地实现数据库查询结果的分页处理,减少了手动编写分页逻辑的工作量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值