IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> mybatis实现分页查询-自己封装分页方法 -> 正文阅读

[Java知识库]mybatis实现分页查询-自己封装分页方法

大致结构如下:
在这里插入图片描述

一、定义返回数据结构

创建返回数据结构主要是为了统一方便,和分页查询的关系并不大,也可以忽略这一步。

package boc.ljh.config;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

@ApiModel("返回数据结构")
public class Result<T> {

    @ApiModelProperty("返回状态")
    private Integer status;
    @ApiModelProperty("返回信息")
    private String message;
    @ApiModelProperty("返回数据")
    private T date;

    public String getMessage() {
        return message;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public T getDate() {
        return date;
    }

    public void setDate(T date) {
        this.date = date;
    }
}

二、封装分页查询类

package boc.ljh.config;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

import java.util.List;

@ApiModel("分页与查询")
public class PaginationHelper<T,O> {

    @ApiModelProperty("开始记录索引")
    private int start;
    @ApiModelProperty("当前页码")
    private int pageNum;
    @ApiModelProperty("每页条数")
    private int pageSize;
    @ApiModelProperty("数据总条数")
    private int totalSize;
    @ApiModelProperty("总页数")
    private int totalPages;
    @ApiModelProperty("查询参数")
    private O options;
    @ApiModelProperty("返回的数据")
    private List<T> data;

    public int getStart() {
        if(pageNum==0){
            pageNum=1;
        }
        start = this.getPageSize() * (pageNum-1);
        return start;
    }

    public void setStart(Integer start) {
        this.start = start;
    }

    public void setStart(int start) {
        this.start = start;
    }

    public int getPageNum() {
        return pageNum;
    }

    public void setPageNum(int pageNum) {
        this.pageNum = pageNum;
    }

    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    public int getTotalSize() {
        return totalSize;
    }

    public void setTotalSize(int totalSize) {
        this.totalSize = totalSize;
    }

    public int getTotalPages() {
        return totalPages;
    }

    public void setTotalPages(int totalPages) {
        this.totalPages = totalPages;
    }

    public O getOptions() {
        return options;
    }

    public void setOptions(O options) {
        this.options = options;
    }

    public List<T> getData() {
        return data;
    }

    public void setData(List<T> data) {
        this.data = data;
    }
}

三、dao、service、controller层

dao:
package boc.ljh.dao;

import boc.ljh.config.PaginationHelper;
import boc.ljh.pojo.User;

import javax.jws.soap.SOAPBinding;
import java.util.List;

public interface UserDao {

   
    //获取用户列表
    List<User> loadAllUserInfo(PaginationHelper paginationHelper);

    //获取数据条数
    Integer loadAllUserCount();
}

service:
package boc.ljh.service;

import boc.ljh.config.PaginationHelper;
import boc.ljh.pojo.User;
import org.apache.ibatis.annotations.Select;
import org.omg.CORBA.INTERNAL;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public interface UserService {

    //获取用户列表
    List<User> loadAllUserInfo(PaginationHelper paginationHelper);

    //获取数据条数
    Integer loadAllUserCount();
}

serviceImpl:
package boc.ljh.service;


import boc.ljh.config.PaginationHelper;
import boc.ljh.dao.UserDao;
import boc.ljh.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

@Service
public class UserServiceImpl implements UserService {

    @Resource
    private UserDao userDao;

    @Override
    public List<User> loadAllUserInfo(PaginationHelper paginationHelper) {
        return userDao.loadAllUserInfo(paginationHelper);
    }

    @Override
    public Integer loadAllUserCount() {
        return userDao.loadAllUserCount();
    }
}

xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="boc.ljh.dao.UserDao">
    <resultMap id="BaseResultMap" type="boc.ljh.pojo.User">
        <id column="user_id" jdbcType="INTEGER" property="userId"/>
        <result column="user_name" jdbcType="VARCHAR" property="userName"/>
        <result column="user_age" jdbcType="INTEGER" property="userAge"/>
    </resultMap>
 
    <select id="loadAllUserInfo" parameterType="boc.ljh.config.PaginationHelper" resultMap="BaseResultMap">
        select * from user order by user_id ASC limit #{start},#{pageSize}
    </select>
    <select id="loadAllUserCount" resultType="java.lang.Integer">
        select count(*) from user
    </select>

</mapper>

controller:
package boc.ljh.controller;

import boc.ljh.config.AppCode;
import boc.ljh.config.PaginationHelper;
import boc.ljh.config.Result;
import boc.ljh.pojo.User;
import boc.ljh.service.UserService;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.annotations.*;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.jws.soap.SOAPBinding;


@Api(tags = "用户管理")
@RestController
@RequestMapping("/user")
public class UserController {

    @Resource
    private UserService userService;

    @ApiOperation("获取用户列表")
    @PostMapping("loadAllUserList")
    @ApiOperationSupport(ignoreParameters = {
            "data",
            "options",
            "totalSize",
            "totalPages",
            "start"
    })
    public Result<PaginationHelper> loadAllUserInfo(@RequestBody PaginationHelper paginationHelper){
        Result<PaginationHelper> result = new Result();
        if(paginationHelper == null){
            paginationHelper = new PaginationHelper<>();
        }
        if(paginationHelper.getOptions() == null){
            paginationHelper.setOptions(new User());
        }
        paginationHelper.setData(userService.loadAllUserInfo(paginationHelper));
        paginationHelper.setTotalSize(userService.loadAllUserCount());
        result.setDate(paginationHelper);
        result.setStatus(200);
        result.setMessage("查询成功");
        return result;
    }

}

四、测试

在这里插入图片描述

重点

首先要知道sql中的limit不是直接分页查询的。比如limit 1,3,。并不是查询第一页每页三条数据的意思,而从第二条数据起查询三条数据,查询的是表中的2-5之间的数据。

select * from user limit 0,5。查询第0-5条之间的数据
select * from user limit 1,5。查询第1-6条之间的数据
select * from user limit 5,5。查询第6-11条之间的数据

可以看封装的分页查询类中有start(开始记录索引)、pageNum(当前页码)、pageSize(每页条数)这个三个参数。
sql需要写成下面这种形式传start(开始记录索引)、pageNum(当前页码)。而不是pageNum(当前页码)、pageSize(每页条数)。

select * from user limit #{start},#{pageSize}

sql不能改变就需要改变其他东西实现页面输入pageNum和pageSize参数实现分页查询功能。

改变封装的分页查询类中start参数的get方法,如下所示:

当页面输入pageNum=1,pageSize=10时,通过下面的改动,上面的sql就会变成
select * from user limit 0,10
当页面输入pageNum=2,pageSize=10时,通过下面的改动,上面的sql就会变成
select * from user limit 10,10
当页面输入pageNum=3,pageSize=10时,通过下面的改动,上面的sql就会变成
select * from user limit 20,10
这样就可以实现分页查询。

 public int getStart() {
        if(pageNum==0){
            pageNum=1;
        }
        start = this.getPageSize() * (pageNum-1);
        return start;
    }
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-09-05 10:40:31  更:2021-09-05 10:42:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 12:48:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码