前言
在项目开发过程中,常常聊到的话题就是分页,怎么分页?不管使用什么方法来实现,最终是需要根据系统进行统一的,不能张三使用这个插件来分页,李四使用那个插件来分页,王五则利用数据库函数来分页,一个系统五花八门,花里胡哨滴,这样是不行的,在一个系统中要么统一的使用某个分页插件,要么使用统一使用数据库分页函数来实现分页。
通过本篇博文的学习,讲学会基于MySQL的数据分页,利用MySQL中的Limit函数来达到快速高效分页的目的,为了通俗易懂,博主已细分为了传统的三层,即:Dao层/Service层/Controller层,如有不到之处,欢迎指正!
Java自定义分页,结合MySQL的Limit函数来实现快速高效的分页
1、员工业务 Controller 层,示例代码内容如下:
package com.huazai.b2c.aiyou.controller;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
*
* @author HuaZai
* @contact [email protected]
*
* @description 员工控制层
*
* @className EmployeeController
* @package com.huazai.b2c.aiyou.controller
* @createdTime 2016年7月22日 上午9:56:39
*
* @version V1.0.0
*/
@Slf4j
@RestController
@Api(value = "/employee")
@RequestMapping("/employee")
public class EmployeeController
{
@Autowired
private EmployeeService employeeService;
@Autowired
private DepartmentService departmentService;
/**
* Description:[获取员工分页信息]
*
* @param pageSize
* [单页大小]
* @param pageNo
* [页数]
* @return ResponseData
*/
@SysLog("员工管理模块-获取分页员工信息")
@GetMapping("/getPageList")
@ApiOperation(value = "/getPageList", notes = "获取员工分页信息")
public ResponseData getPageList(
@RequestParam(name = "length") @ApiParam(name = "length", value = "页大小", defaultValue = "20") Long pageSize,
@RequestParam(name = "current") @ApiParam(name = "current", value = "页数", defaultValue = "1") Long pageNo,
@ApiParam(name = "employee", value = "搜索员工参数实体") Employee employee
)
{
PageBean employeePage;
try
{
// 获取员工分页信息
employeePage = employeeService.selectPageWithParam(pageNo, pageSize, employee);
} catch (Exception e)
{
log.error(Constant.INFO_LOG_MSG, e.getMessage());
return ResponseData.error(RespCodeEnum.ERROR_INTERNAL_SERVER.getCode(), "分页员工信息获取失败");
}
return ResponseData.ok().put("employeePage", employeePage);
}
}
2、员工业务 Service 接口层,示例代码内容如下:
package com.huazai.b2c.aiyou.service;
import com.baomidou.mybatisplus.service.IService;
import java.util.List;
/**
*
* @author HuaZai
* @contact [email protected]
*
* @description 员工服务接口层
*
* @className EmployeeService
* @package com.huazai.b2c.aiyou.service
* @createdTime 2016年7月22日 上午11:12:27
*
* @version V1.0.0
*/
public interface EmployeeService extends IService
{
/**
* 查询所有员工账户信息
*
* @param pageNo
* @param pageSize
* @param empNo
* @return
*/
PageBean selectPageWithParam(Long pageNo, Long pageSize, Employee employee);
}
3、员工业务 ServiceImpl 层,示例代码内容如下:
package com.huazai.b2c.aiyou.service.impl;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import io.jsonwebtoken.Claims;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
/**
*
* @author HuaZai
* @contact [email protected]
*
* @description 员工服务实现层
*
* @className EmployeeServiceImpl
* @package com.huazai.b2c.aiyou.service.impl
* @createdTime 2016年7月22日 上午11:16:54
*
* @version V1.0.0
*/
@Service
public class EmployeeServiceImpl extends ServiceImpl implements EmployeeService
{
@Autowired
private EmployeeMapper employeeMapper;
@Override
public PageBean selectPageWithParam(Long pageNo, Long pageSize, Employee employee)
{
// 获取总体数据
List employeePages = employeeMapper.selectEmployeeeByPage(null, null, employee);
Long totalSize = Long.valueOf(employeePages.size());
PageBean pageBean = new PageBean(pageNo, pageSize, totalSize);
// 获取数据索引
Long startIndex = pageBean.getStartIndex();
// 获取当前分页数据
List employeeDtos = employeeMapper.selectEmployeeeByPage(startIndex,
pageSize, employee);
pageBean.setDataList(employeeDtos);
return pageBean;
}
}
4、员工业务 Mapper 层,示例代码内容如下:
package com.huazai.b2c.aiyou.mapper;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.session.RowBounds;
import org.springframework.stereotype.Repository;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Map;
/**
*
* @author HuaZai
* @contact [email protected]
*
* @description TODO
*
* @className EmployeeMapper
* @package com.huazai.b2c.aiyou.mapper
* @createdTime 2016年7月22日 上下午14:16:52
*
* @version V1.0.0
*/
@Repository
public interface EmployeeMapper extends BaseMapper
{
List selectEmployeeByPage(@Param(value = "pageNo") Long pageNo,
@Param(value = "pageSize") Long pageSize, @Param(value = "employee") Employee employee);
}
5、Mapper 的配置文件 Mapper.xml,示例内容如下:
6、分页PageBeans工具类,示例内容如下:
package com.huazai.b2c.aiyou.common;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.util.List;
/**
*
* @author HuaZai
* @contact [email protected]
*
* @description 分页工具类
*
* @className PageBean
* @package com.huazai.b2c.aiyou.common
* @createdTime 2016年7月17日 上午10:40:21
*
* @version V1.0.0
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class PageBean
{
// 当前页
private Long currentNo;
// 单页显示数据条数
private Long pageSize;
// 总的数据条数
private Long totalRecord;
// 总页数
private Long totalPage;
// 开始索引
private Long startIndex;
// 分页显示
private Long start;
private Long end;
// 数据集合
private List dataList;
/**
*
* @param currentNo
* 当前页
* @param pageSize
* 单页显示数据条数
* @param totalRecord
* 总的数据条数
*/
public PageBean(Long currentNo, Long pageSize, Long totalRecord)
{
this.currentNo = currentNo;
this.pageSize = pageSize;
this.totalRecord = totalRecord;
// 获取总页数
if (totalRecord % pageSize == 0)
{
this.totalPage = totalRecord / pageSize;
} else
{
this.totalPage = totalRecord / pageSize + 1;
}
this.startIndex = (currentNo - 1) * pageSize;
this.start = 1L;
this.end = 5L;
if (totalPage <= 5)
{
this.end = this.totalPage;
} else
{
this.start = currentNo - 2;
this.end = currentNo + 2;
if (start < 0)
{
start = 1L;
end = 5L;
}
if (end > this.totalPage)
{
this.end = totalPage;
this.start = end - 5;
}
}
}
}
好了,关于 Java自定义分页,结合MySQL的Limit关键字实现快速高效的分页 就写到这儿了,如果还有什么疑问或遇到什么问题欢迎扫码提问,也可以给我留言哦,我会一一详细的解答的。
歇后语:“ 共同学习,共同进步 ”,也希望大家多多关注CSND的IT社区。
作 者: | 华 仔 |
联系作者: | [email protected] |
来 源: | CSDN (Chinese Software Developer Network) |
原 文: | https://blog.csdn.net/Hello_World_QWP/article/details/89352124 |
版权声明: | 本文为博主原创文章,请在转载时务必注明博文出处! |