日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

mybatis实现分页查询-自己封装分页方法

發布時間:2025/3/19 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 {@Resourceprivate UserDao userDao;@Overridepublic List<User> loadAllUserInfo(PaginationHelper paginationHelper) {return userDao.loadAllUserInfo(paginationHelper);}@Overridepublic 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 {@Resourceprivate 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;}

總結

以上是生活随笔為你收集整理的mybatis实现分页查询-自己封装分页方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。