java分页截取的 函数_Java自定义分页,结合MySQL的Limit函数来实现快速高效的分页...

前言

在项目开发过程中,常常聊到的话题就是分页,怎么分页?不管使用什么方法来实现,最终是需要根据系统进行统一的,不能张三使用这个插件来分页,李四使用那个插件来分页,王五则利用数据库函数来分页,一个系统五花八门,花里胡哨滴,这样是不行的,在一个系统中要么统一的使用某个分页插件,要么使用统一使用数据库分页函数来实现分页。

通过本篇博文的学习,讲学会基于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 who.seek.me@java98k.vip

* * @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

)

{

PageBeanemployeePage;

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 who.seek.me@java98k.vip

* * @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

*/

PageBeanselectPageWithParam(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 who.seek.me@java98k.vip

* * @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 ServiceImplimplements EmployeeService

{

@Autowired

private EmployeeMapper employeeMapper;

@Override

public PageBeanselectPageWithParam(Long pageNo, Long pageSize, Employee employee)

{

// 获取总体数据

ListemployeePages = employeeMapper.selectEmployeeeByPage(null, null, employee);

Long totalSize = Long.valueOf(employeePages.size());

PageBean pageBean = new PageBean(pageNo, pageSize, totalSize);

// 获取数据索引

Long startIndex = pageBean.getStartIndex();

// 获取当前分页数据

ListemployeeDtos = 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 who.seek.me@java98k.vip

* * @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{

ListselectEmployeeByPage(@Param(value = "pageNo") Long pageNo,

@Param(value = "pageSize") Long pageSize, @Param(value = "employee") Employee employee);

}

5、Mapper 的配置文件 Mapper.xml,示例内容如下:

SELECT e.id, e.name, e.address FROM employee e WHERE e.status IN (1, 2)

and e.name like concat('%',#{employee.name},'%')

limit #{pageNo}, #{pageSize}

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 who.seek.me@java98k.vip

* * @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 ListdataList;

/**

*

* @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社区。

作       者:

华    仔

联系作者:

who.seek.me@java98k.vip

来        源:

CSDN (Chinese Software Developer Network)

原        文:

https://blog.csdn.net/Hello_World_QWP/article/details/89352124

版权声明:

本文为博主原创文章,请在转载时务必注明博文出处!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值