栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

SpringBoot-使用分页插件(PageHelper)

Java 更新时间:发布时间: 百科书网 趣学号
前言 分页插件的必要性

互联网应用中,分页可谓无处不在,在每个需要展示数据的地方,都能找到分页的影子。在日常开发中,为了追求效率,通常使用数据库的物理分页。这时,对于一个业务逻辑SQL,大多数情况需要输出两段SQL来达到分页效果:count查询总数和limit分页,这无疑增加了大量的工作量。对于这种大量的、相似的、非业务逻辑的代码,抽象出公共插件是势在必行的。

分页插件原理

Mybatis给开发者提供了一个拦截器接口,只要实现了该接口,就可以在Mybatis执行SQL前,作一些自定义的操作。分页插件就是在此基础上开发出来的,对于一个需要分页的SQL,插件会拦截并生成两段SQL。举一个简单的例子:

原SQL:

select * from table where a = '1'

拦截后的查询总数SQL:

select count(*) from table where a = '1'

拦截后的分页SQL:

select * from table where a = '1' limit 5,10

这样我们只需要根据业务逻辑开发原SQL,不需关心分页语法对原SQL的影响,拦截器已经为我们处理好了。

pom.xml文件

添加mybatis、pagehelper、mysql和web依赖。

    
        1.8
        2.1.0
        1.2.5
    

    
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            ${mybatis.version}
        
        
        
            com.github.pagehelper
            pagehelper-spring-boot-starter
            ${mybatis.pagehelper.version}
        
        
        
            mysql
            mysql-connector-java
            runtime
        
        
            org.springframework.boot
            spring-boot-devtools
            runtime
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    
配置文件

配置数据库信息和分页参数。

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/test?serverTimezone=GMT
pagehelper:
    #配置数据库类型
    helperDialect: mysql
    #3.3.0版本可用 - 分页参数合理化,默认false禁用
    #启用合理化时,如果pageNum<1 会查询第一页,如果pageNum>pages会查询最后一页
    #禁用合理化时,如果pageNum<1 或pageNum>pages会返回空数据
    reasonable: true
    #是否支持接口参数来传递分页参数,默认false
    supportMethodsArguments: true
    #3.5.0版本可用 - 为了支持startPage(Object params)方法
    #增加了一个`params`参数来配置参数映射,用于从Map或ServletRequest中取值
    #可以配置pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值
    params: count=countSql
实体类
@Alias("user")
public class User {

    private Long id;
    private String name;
    private Integer age;
    private String email;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}
mapper类

使用注解方式。

@Mapper
public interface UserMapper {

    @Select("select * from user")
    Page getUserList();
}
controller类
@RestController
public class UserController {

    @Autowired
    private UserMapper userMapper;

//    http://localhost:8080/getUserList?pageNum=1&pageSize=2
    @RequestMapping("getUserList")
    public Page getUserList(Integer pageNum, Integer pageSize) {
        PageHelper.startPage(pageNum, pageSize);
        Page userList = userMapper.getUserList();
        return userList;
    }
}
测试

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/956562.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号