MyBatis利用插件PageHelper分页

5 篇文章 0 订阅
1 篇文章 0 订阅

      在Spring Boot整合MyBatis,对查询结果分页。本示例用的数据库是PostgreSQL,数据库是"testdb",public模式。

1.Linux平台,创建数据库"testdb",和表"student":
postgres@shanks:~$ psql
psql (9.6.7)
输入 "help" 来获取帮助信息.

postgres=# create database testdb;
CREATE DATABASE
postgres=# \c testdb;
您现在已经连接到数据库 "testdb",用户 "postgres".
testdb=#create table student(id serial primary key, name varchar, sex varchar default '男');
CREATE TABLE
testdb=# \d public.student;
                         数据表 "public.student"
 栏位 |       类型        |                    修饰词
------+-------------------+-----------------------------------------------
 id   | integer           | 非空 默认 nextval('student_id_seq'::regclass)
 name | character varying |
 sex  | character varying | 默认 '男'::character varying
索引:
    "student_pkey" PRIMARY KEY, btree (id)

testdb=# insert into public.student(name,sex) values('刘备','男'),('曹操','男'),('孙权','男'),('貂蝉','女'),('诸葛亮','男'),('张辽','男'),('陈寿','男');
INSERT 0 7
testdb=# select * from student;
 id |  name  | sex 
----+--------+-----
  1 | 刘备   | 男
  2 | 曹操   | 男
  3 | 孙权   | 男
  4 | 貂蝉   | 女
  5 | 诸葛亮 | 男
  6 | 张辽   | 男
  7 | 陈寿   | 男
(7 行记录)
2.创建Spring Boot项目
  • 结构:

      

  • 所有maven依赖:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
<!--mybatis-->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.3.2</version>
</dependency>
<!--postgresql数据库-->
<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <scope>runtime</scope>
</dependency>
<!--分页插件-->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>4.2.1</version>
</dependency>
  • application.properties配置:
# 服务端口
server.port = 8848
# 数据库链接
spring.datasource.driverClassName = org.postgresql.Driver
spring.datasource.url = jdbc:postgresql://localhost:5432/testdb?currentSchema=public,sys,app
spring.datasource.username = postgres
spring.datasource.password = aaa
# mybatis配置文件
mybatis.config-location = classpath:mybatis-config.xml
# 指定实体类所在包,就不用在所有实体类上加其他注解,就可以被spring容器管理
mybatis.type-aliases-package = com.example.demo.entity
  • mybatis-config.xml配置,需要添加interceptor:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- 配置分页插件 -->
    <plugins>
        <plugin interceptor="com.github.pagehelper.PageHelper">
            <!-- 设置数据库类型 PostgreSQL-->
            <property name="dialect" value="postgresql"/>
        </plugin>
    </plugins>
</configuration>
  • DemoApplication.java,注解”@MapperScan("com.example.demo.mapper")“可以扫描mapper类,本例采用的是注解的方式写sql:
package com.example.demo;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication()
@MapperScan("com.example.demo.mapper")
public class DemoApplication {
	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}
}
  • StudentMapper.java,启动类上有@MapperScan,就不用再添加@Mapper注解:
package com.example.demo.mapper;

import com.example.demo.entity.Student;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;

public interface StudentMapper {

    @Select("SELECT * FROM student")
    List<Student> queryAll();

    @Select("SELECT * FROM student WHERE sex=${sex}")
    List<Student> queryBySex(@Param("sex") String sex);

}
  • 实体类 Student.java:
package com.example.demo.entity;
public class Student {

    Integer id;

    String name;

    String sex;

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}
  •   服务类 StudentService.java:
package com.example.demo.service;

import com.example.demo.entity.Student;
import com.example.demo.mapper.StudentMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class StudentService {

    @Autowired
    private StudentMapper studentMapper;

    /**
     * 查询所有
     * @return
     */
    public List<Student> queryAll() {
        return studentMapper.queryAll();
    }

    /**
     * 按性别查询
     * @return
     */
    public List<Student> queryBySex(String sex) {
        return studentMapper.queryBySex(sex);
    }
}
  • StudentController.java,分页查询:
package com.example.demo.contoller;

import com.example.demo.entity.Student;
import com.example.demo.service.StudentService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/student")
public class StudentController {

    @Autowired
    private StudentService studentService;

    @RequestMapping(value = {""}, method = {RequestMethod.GET, RequestMethod.POST})
    public PageInfo queryAll(
            @RequestParam(value = "pageNumber", defaultValue = "1") Integer pageNumber,
            @RequestParam(value = "pageSize",defaultValue = "3") Integer pageSize
    ) {
        // 分页查询。只对后一个查询有效
        PageHelper.startPage(pageNumber,pageSize);
        // 结果中已经分页
        List<Student> lists = studentService.queryAll();
        // 返回分页相关信息
        return new PageInfo(lists);
    }

    @GetMapping("/sex")
    public PageInfo queryBySex(
            @RequestParam(value = "pageNumber", defaultValue = "1") Integer pageNumber,
            @RequestParam(value = "pageSize",defaultValue = "3") Integer pageSize,
            @RequestParam("sex") String sex
    ) {
        // 分页查询。只对后一个查询有效
        PageHelper.startPage(pageNumber,pageSize);
        // 结果中已经分页
        List<Student> lists = studentService.queryBySex(sex);
        // 返回分页相关信息
        return new PageInfo(lists);
    }
}
3.启动项目,在浏览器输入http://localhost:8848/student?pageNumber=1&pageSize=2,返回如下:
{
"pageNum": 1,
"pageSize": 2,
"size": 2,
"orderBy": null,
"startRow": 1,
"endRow": 2,
"total": 7,
"pages": 4,
"list": [
{
"id": 1,
"name": "刘备",
"sex": "男"
},
{
"id": 2,
"name": "曹操",
"sex": "男"
}
],
"prePage": 0,
"nextPage": 2,
"isFirstPage": true,
"isLastPage": false,
"hasPreviousPage": false,
"hasNextPage": true,
"navigatePages": 8,
"navigatepageNums": [
1,
2,
3,
4
],
"navigateFirstPage": 1,
"navigateLastPage": 4,
"firstPage": 1,
"lastPage": 4
}

      可以设置分页信息,返回其他结果。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值