Spring Boot(java)实现分页功能

因为我是写一个项目需要这个分页功能,需要了解一下所以我去学习了一下,

个人认为虽然现成的封装方法用起来很方便但是我们作为这个方面的初学者,我们也需要去了解是怎写出来的,(当然正式的写项目的时候,需要统一化就使用封装好的就可以了)

手写

controller层

@GetMapping("/page")
    public Page<User> findByPage(@RequestParam(defaultValue = "1") Integer pageNum,
                                 @RequestParam(defaultValue = "10") Integer pageSize){
                Integer offset=(pageNum - 1) * pageSize;
                List<User> userData = userMapper.findByPage(offset,pageSize);
                Page<User> page = new Page<>();
                page.setData(userData);

                Integer total = userMapper.countUser();
                page.setTotal(total);
                page.setPageNum(pageNum);
                page.setPageSize(pageSize);
                return page;
    }
 关键代码

因为pageNum代表的页码所以是1,2,3,4,5等等,而pageSize代表的是每一页需要的数据量,

在mysql上limit语法需要两个参数SELECT * FROM `user` limit #{a} ,#{b},第一个代表偏移值,第二个代表从偏移值这个地方一下需要多少数据,而这个段代码因为mysql数据是从第0个开始计算的,所以需要减1,乘上pageSize代表着从第a页的第一条数据开始读取b条数据,这个可能比较抽象,大家努力想一想吧

 Integer offset = (pageNum - 1) * pageSize;

mapper(Dao层)

这里要强调一下,我最初没有添加@Param而是直接定义的导致出现bug,

我去查阅了一下,发现@param的用途是作为Dao层的注解,作用是用于传递参数,从而可以与mysql的字段名相对应,简单来说就是,可以对参数命名,起什么名字都可以,当前参数或者自定的,然后Mybatis通过参数的名称,在拼接sql语句的时候进行对号入座。

不使用@param参数的话,Mybatis在进行sql操作的时候找不到对应参数,会导致报错

 @Select("SELECT * FROM `user` limit #{offset},#{pageSize}")
    List<User> findByPage(@Param("offset") Integer offset,
                          @Param("pageSize") Integer pageSize);
  
//count(id)通过id获取到数据总数
 @Select("select count(id) from user")
    Integer countUser();

User.java

用户数据

@Data
public class User {

//Data自动生成javabean不需要再写无参构造和有参构造set和get
        private Integer id;
        private String name;
        private String address;
        private Integer age;
        private String sex;
        private String phone;

}

Page.java

分页数据

@Data
public class Page<T> {
    private Integer pageNum;
    private Integer pageSize;
    private Integer total;
    private List<T> data;
}
运行结果:

 

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot提供了很多方式来实现分页查询的功能,以下是其中的两种方式: 1. 使用Spring Data JPA 使用Spring Data JPA可以很方便地实现分页查询的功能Spring Data JPA提供了Pageable接口和Page类来支持分页查询。 首先,在Repository接口中定义一个方法,方法名以“findBy”开头,后面跟着要查询的属性名,然后再跟着Pageable类型的参数,如下所示: ```java @Repository public interface UserRepository extends JpaRepository<User, Long> { Page<User> findByName(String name, Pageable pageable); } ``` 然后,在Controller中使用@GetMapping注解实现分页查询,如下所示: ```java @GetMapping("/users") public Page<User> getUsers(@RequestParam(defaultValue = "0") int page, @RequestParam(defaultValue = "10") int size) { Pageable pageable = PageRequest.of(page, size); return userRepository.findByName("张三", pageable); } ``` 其中,PageRequest.of()方法用于创建Pageable对象,第一个参数是页数,从0开始计数,第二个参数是每页显示的记录数。userRepository.findByName()方法用于查询数据并返回Page对象。 2. 使用MyBatis 使用MyBatis可以通过分页插件PageHelper来实现分页查询的功能。 首先,在pom.xml文件中添加PageHelper的依赖: ```xml <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.3.0</version> </dependency> ``` 然后,在Mapper接口中定义一个方法,方法名以“findBy”开头,后面跟着要查询的属性名,然后再跟着Page类型的参数,如下所示: ```java @Mapper public interface UserMapper { List<User> findByName(String name, Page page); } ``` 然后,在Controller中使用@GetMapping注解实现分页查询,如下所示: ```java @GetMapping("/users") public PageInfo<User> getUsers(@RequestParam(defaultValue = "1") int pageNum, @RequestParam(defaultValue = "10") int pageSize) { Page page = PageHelper.startPage(pageNum, pageSize); List<User> users = userMapper.findByName("张三", page); return new PageInfo<>(users); } ``` 其中,PageHelper.startPage()方法用于创建Page对象并设置分页参数,第一个参数是页数,从1开始计数,第二个参数是每页显示的记录数。userMapper.findByName()方法用于查询数据并返回List对象。最后,使用PageInfo类来包装List对象并返回。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值