Mybatis自定义数据库分页查询
后端部分
第一步:在util包下定义PageBean<T>工具类用于接受一个分页查询结果
import lombok.Data;
import java.util.List;
//数据库自定义分页查询的工具类
@Data
public class PageBean<T> {
private int currPage;//当前页数
private int pageSize;//每页的数据条数
private int totalCount;//总记录数
private int totalPage;//总页数
private List<T> lists;//每页的显示的数据
public PageBean() {
super();
}
@Override
public String toString() {
return "PageBean{" +
"currPage=" + currPage +
", pageSize=" + pageSize +
", totalCount=" + totalCount +
", totalPage=" + totalPage +
", lists=" + lists +
'}';
}
}
第二步具体业务实现serviceImpl
/**
* 分页查询短信历史纪录
* @param currPage 第几页
* @param pageSize 每页显示的条数
* @return PageBean<Map<String,Object>> 这里我用map来接收数据库返回的信息,你也可以用你的实体类来接收PageBean<User>
*/
@Resource
private UserDaoMapper userDaoMapper; //这里改为你自己的mapper接口
public PageBean<User> findAllUser(int currPage,int pageSize){
HashMap<String, Object> map = new HashMap<>();//哈希集合存储不重复的数据
PageBean<User> pageBean = new PageBean<>();
//每页显示的数据条数
pageBean.setPageSize(pageSize);
//封装总记录数,获取总数
int totalCount = userDaoMapper.getUserNumber(); //改为你自己的接口
pageBean.setTotalCount(totalCount);
//如果没有数据,直接返回
if(totalCount==0){
return pageBean;
}
//封装总页数
double tc = totalCount;
Double num = Math.ceil(tc / pageSize);//向上取整
pageBean.setTotalPage(num.intValue());
//传入的当前页小于1时则等于1,大于总页数则等于总页数也就是最后一页
if(currPage<1) currPage=1;
else if(currPage>pageBean.getTotalPage()) currPage = pageBean.getTotalPage();
//封装当前页数
pageBean.setCurrPage(currPage);
map.put("start", (currPage - 1) * pageSize);
map.put("size", pageBean.getPageSize());
//封装每页显示的数据
List<User> lists = userDaoMapper.findAllUser(map); //改为你自己的接口
for(User user:lists){
user.setPassword("");
}
pageBean.setLists(lists);
return pageBean;
}
第三步:mapper的XML文件
<!--分页查找所有用户 这里我简单用了一个map来接收结果,也可以用你的实体类来接收 resultType="user"-->
<select id="findAllUser" parameterType="Map" resultType="map">
select *
from users
limit #{start},#{size}
</select>
<!--获取用户的总数-->
<select id="getUserNumber" resultType="int">
select count(*)
from users
</select>
第四步:接口层
/**
* 获取历史记录
* limit 每页显示多少条数据
* page 第几页
* @return
*/
@GetMapping("/sms/getsmsloglist")
public Result getSmslogList(@RequestParam("limit") Integer limit,@RequestParam("page") Integer page) {
return userService.findAllUser(page,limit); //调用业务实现,返回结果根据你自己的返回结构封装
}
前端部分
前端我用的element的table很简单,就贴个简单示例
<pagination v-show="total>0" :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList" />
//totle : 数据总条数
//listQuery.page :第几页
//listQuery.limit : 每页显示几条数据
//@pagination="getList" : 获取后端数据列表的方法