美文网首页Springbootspringboot
SpringBoot 使用分页插件(PageHelper)

SpringBoot 使用分页插件(PageHelper)

作者: 月弦 | 来源:发表于2019-10-10 15:04 被阅读0次

前言

分页插件的必要性

互联网应用中,分页可谓无处不在,在每个需要展示数据的地方,都能找到分页的影子。在日常开发中,为了追求效率,通常使用数据库的物理分页。这时,对于一个业务逻辑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依赖。

    <properties>
        <java.version>1.8</java.version>
        <mybatis.version>2.1.0</mybatis.version>
        <mybatis.pagehelper.version>1.2.5</mybatis.pagehelper.version>
    </properties>

    <dependencies>
        <!--web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>${mybatis.version}</version>
        </dependency>
        <!-- pagehelper -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>${mybatis.pagehelper.version}</version>
        </dependency>
        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

二、配置文件

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

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<User> getUserList();
}

五、controller类

@RestController
public class UserController {

    @Autowired
    private UserMapper userMapper;

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

六、测试

image.png

相关文章

网友评论

    本文标题:SpringBoot 使用分页插件(PageHelper)

    本文链接:https://www.haomeiwen.com/subject/dbuopctx.html