mybatis实现分页查询-自己封装分页方法
生活随笔
收集整理的這篇文章主要介紹了
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
這樣就可以實現分頁查詢。
總結
以上是生活随笔為你收集整理的mybatis实现分页查询-自己封装分页方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java实现二进制转16进制
- 下一篇: springboot集成shiro实现注