精华内容
下载资源
问答
  • java后端实现分页逻辑

    2020-07-07 09:57:09
    java后端实现分页逻辑 创建一个工具类 用来计算和存储页码、页数等参数 public class PageSupport { //当前页码-来自于用户输入 private int currentPageNo = 1; //总数量(表) private int totalCount = 0; ...

    java后端实现分页逻辑

    创建一个工具类

    用来计算和存储页码、页数等参数

    public class PageSupport {
    	//当前页码-来自于用户输入
    	private int currentPageNo = 1;
    	
    	//总数量(表)
    	private int totalCount = 0;
    	
    	//页面容量
    	private int pageSize = 0;
    	
    	//总页数-totalCount/pageSize(+1)
    	private int totalPageCount = 1;
    
    	public int getCurrentPageNo() {
    		return currentPageNo;
    	}
    
    	public void setCurrentPageNo(int currentPageNo) {
    		if(currentPageNo > 0){
    			this.currentPageNo = currentPageNo;
    		}
    	}
    
    	public int getTotalCount() {
    		return totalCount;
    	}
    
    	public void setTotalCount(int totalCount) {
    		if(totalCount > 0){
    			this.totalCount = totalCount;
    			//设置总页数
    			this.setTotalPageCountByRs();
    		}
    	}
    	public int getPageSize() {
    		return pageSize;
    	}
    
    	public void setPageSize(int pageSize) {
    		if(pageSize > 0){
    			this.pageSize = pageSize;
    		}
    	}
    
    	public int getTotalPageCount() {
    		return totalPageCount;
    	}
    
    	public void setTotalPageCount(int totalPageCount) {
    		this.totalPageCount = totalPageCount;
    	}
    	
    	public void setTotalPageCountByRs(){
    		if(this.totalCount % this.pageSize == 0){
    			this.totalPageCount = this.totalCount / this.pageSize;
    		}else if(this.totalCount % this.pageSize > 0){
    			this.totalPageCount = this.totalCount / this.pageSize + 1;
    		}else{
    			this.totalPageCount = 0;
    		}
    	}
    	
    }
    

    controller 实现方法

    其中limit 、page 是前端传入的参数。 limit 表示每页记录数,
    page 表示当前页码

    
            if (params.get("limit") == null) {
                params.put("limit", 10);
            }
            String pageIndex="";
            if (params.get("page") != null) {
                pageIndex= (String) params.get("page");
            }
            String num= (String) params.get("limit");
            int pageSize=Integer.parseInt(num);//每页显示的条数
    
            Query query = new Query(params);
            int total = wksbService.count(query);//数据库中总的记录数
            Map  pageParams=CommonUtil.getPageParams(total,pageIndex,pageSize);
            int offset = Integer.parseInt(String.valueOf(pageParams.get("offset")));//数据库开始的下标
            query.put("offset",offset);
            int limit=offset+pageSize;
            query.put("limit",limit);
            List  list= wksbService.list(query);
    

    此时返回的list就是分页的数据

    编写一个方法 getPageParams() 用来 计算出sql语句开始查询的记录数 。其中需要传入总的记录数,以及页码、每页显示的条数

     public static  Map  getPageParams(int totalCount,String pageIndex,int pageSize){
            Map resultMap=new HashMap();
            //当前页码
            int currentPageNo = 1;
            if (pageIndex != null) {
                try {
                    currentPageNo = Integer.valueOf(pageIndex);
                } catch (NumberFormatException e) {
                    System.out.println("传入的页码 不规范!");
                }
            }
            //总页数
            PageSupport pages = new PageSupport();
            pages.setCurrentPageNo(currentPageNo);
            pages.setPageSize(pageSize);
            pages.setTotalCount(totalCount);
            int totalPageCount = pages.getTotalPageCount();
            //控制首页和尾页
            if (currentPageNo < 1) {
                currentPageNo = 1;
            } else if (currentPageNo > totalPageCount) {
                currentPageNo = totalPageCount;
            }
            int offset = (currentPageNo - 1) * pageSize;
            resultMap.put("offset",offset);
            return resultMap;
        }
    

    工具类 Query

    就是自己封装的一个Map

    public class Query extends LinkedHashMap<String, Object> {
    	private static final long serialVersionUID = 1L;
    	// offset开始索引,limit步长
    	private int offset;
    	// 每页条数
    	private int limit;
    
    	public Query(Map<String, Object> params) {
    		this.putAll(params);
    		// 分页参数
    		this.offset = Integer.parseInt(params.get("offset").toString());
    		this.limit = Integer.parseInt(params.get("limit").toString());
    		this.put("offset", offset);
    		this.put("page", offset / limit + 1);
    		this.put("limit", limit);
    	}
    
    	public int getOffset() {
    		return offset;
    	}
    
    	public void setOffset(int offset) {
    		this.put("offset", offset);
    	}
    
    	public int getLimit() {
    		return limit;
    	}
    
    	public void setLimit(int limit) {
    		this.limit = limit;
    	}
    }
    
    展开全文
  • Java后端实现分页效果

    千次阅读 2020-02-28 19:32:32
    前言:在我们的Java项目中,分页是必不可少的数据展示页面所以这篇博客主要讲分页实现 第一步,准备工具类,用作数据封装,拿到前端 PageUtils.java public class PageUtils<T> { private long pageIndex...

    前言:在我们的Java项目中,分页是必不可少的数据展示页面所以这篇博客主要讲分页的实现

    在我们的开发当中 ,前后端之间数据交互是必不可少的,如果数据比较多,就需要进行数据封装,拿到前端进行页面的展示

    第一步,准备工具类,用作数据封装,拿到前端

    - PageUtils.java

    public class PageUtils<T> {
    
        private long pageIndex;  //当前页码
        private long pageSize;  //页面大小
        private long totalCount; //总条数
        private long pageCount;  //总页数
    
        private List<T> records; //每页的数据集合
    
        private long numberStart=1;//开始的页码序号
        private long numberEnd;//结束序号
    
        public PageUtils(long pageIndex, long pageSize, long totalCount, List<T> records) {
            this.pageIndex = pageIndex;
            this.pageSize = pageSize;
            this.totalCount = totalCount;
            this.records = records;
            this.pageCount=(totalCount%pageSize==0)?(totalCount/pageSize):(totalCount/pageSize+1);
    
            this.numberStart=1;
            this.numberEnd=pageCount;
    
            //数学算法
            // -----------给页码序号赋值------------------
            // 一共显示10个页面 动态伸缩
            if (this.pageCount <= 10) {
                this.numberStart = 1;
                this.numberEnd = pageCount;
            } else {
                this.numberStart = pageIndex - 4;
                this.numberEnd = pageIndex + 5;
                if (numberStart < 1) {
                    this.numberStart = 1;
                    this.numberEnd = 10;
                } else if (numberEnd > pageCount) {
                    this.numberEnd = pageCount;
                    this.numberStart = pageCount - 9;
                }
            }
            // -----------偷偷的给页码序号赋值------------------
        }
    
        public PageUtils() {
            this.pageCount=(totalCount%pageSize==0)?(totalCount/pageSize):(totalCount/pageSize+1);
        }
    
        public long getPageIndex() {
            return pageIndex;
        }
    
        public void setPageIndex(long pageIndex) {
            this.pageIndex = pageIndex;
        }
    
        public long getPageSize() {
            return pageSize;
        }
    
        public void setPageSize(long pageSize) {
            this.pageSize = pageSize;
        }
    
        public long getTotalCount() {
            return totalCount;
        }
    
        public void setTotalCount(long totalCount) {
            this.totalCount = totalCount;
        }
    
        public long getPageCount() {
            return pageCount;
        }
    
        public void setPageCount(long pageCount) {
            this.pageCount = pageCount;
        }
    
        public List<T> getRecords() {
            return records;
        }
    
        public void setRecords(List<T> records) {
            this.records = records;
        }
    
        public long getNumberStart() {
            return numberStart;
        }
    
        public void setNumberStart(long numberStart) {
            this.numberStart = numberStart;
        }
    
        public long getNumberEnd() {
            return numberEnd;
        }
    
        public void setNumberEnd(long numberEnd) {
            this.numberEnd = numberEnd;
        }
    
    }
    

    第二步:需要准备好数据库的来查询语句,实体类更具数据表定义

    1. public int getTotalCount(); //一共多少
    2. public List getUsers(@Param(“pageStart”) long pageStart, @Param(“pageSize”) long pageSize);//查询每页数据

    UserMapper.java持久层

    public interface UserMapper{
    	public int getTotalCount(); //一共多少
    	public List<User> getUsers(@Param("pageStart") long pageStart, @Param("pageSize") long pageSize);//查询每页数据
    }
    
    

    UserService.java

    public interface UserService{
    	public int getTotalCount(); //一共多少
    	public List<User> getUsers(@Param("pageStart") long pageStart, @Param("pageSize") long pageSize);//查询每页数据
    }
    

    UserServiceImpl实现类

    @Service
    public class UserServiceImpl implements UserService{
    	@Autowired
    	UserMapper userMapper ;
    	 //一共多少
    	public int getTotalCount(){
    		return userMapper.getTotalCount();
    	}
    	//查询每页数据
    	public List<User> getUsers(@Param("pageStart") long pageStart, @Param("pageSize") long pageSize){
    		return userMapper.getUsers(pageStart,pageSize);
    	}
    }
    

    第三步:控制层中编写代码

    //@RequestMapping("/user_list/{pageIndex}/{pageSize}")
    //解释:/user_list/第一页/一共显示5条数据
    
    @Controller
    public class UserController {
    	@Autowired
    	UserService userSerivce;
    		
    	@RequestMapping("/user_list/{pageIndex}/{pageSize}")
    	    public String user_list(@PathVariable("pageIndex") long pageIndex, @PathVariable("pageSize") long pageSize, Model model){
    	        int totalCount = userService.getTotalCount(); //总条数
    	        List<User> users = userService.getUsers((pageIndex - 1) * pageSize, pageSize);//每页数据
    	        //控制台打印出数据
    	       for(User user:users){
    	            System.out.println("user= " + user);
    	        }
    	        //封装一个分页的工具类
    	        PageUtils pageUtils=new PageUtils(pageIndex,pageSize,totalCount,users);
    	        //通过Model拿到前端
    	        model.addAttribute("pageUtils",pageUtils);
    	        return "userlist";//返回页面,经过SpringMVC前后缀配置生成路径
    	    }
    }
    

    第四步:JSP页面

    • 加入文件头
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
    
    • 使用JSTL的 <c:forEach></c:forEach>标签循环拿出数据添加
     <%--拿到数据集合--%>
    <c:forEach items="${pageUtils.records}" var="user">
            <tr>
                <td>${user.id}</td>
                <td>${user.name}</td>
                <td>${user.pass}</td>
            </tr>
    </c:forEach>
    

    第五步:配置tomcat,运行项目,当然如果使用SpringBoot会简单很多

    在这里插入图片描述

    第五步:启动成功,页面展示出来,说明分页就做好了

    在这里插入图片描述




    原创文章,未经允许禁止盗用




    展开全文
  • java 后端简单分页

    2019-09-12 07:33:36
    好久没有搞分页了,,一般好点的项目, 都有 集成第三方 的分页插件了,直接用就好啦,根本不需要管那么多。。 可是 在 开发一个 项目的时候, 他的分页没有使用 分页插件,,而是 使用原生的 limit分页,而我又想 ...

    好久没有搞分页了,,一般好点的项目, 都有 集成第三方 的分页插件了,直接用就好啦,根本不需要管那么多。。 可是 在 开发一个 项目的时候, 他的分页没有使用 分页插件,,而是 使用原生的 limit分页,而我又想 集成 分页插件进来。。。所以把我 绕了半天了。。。绝对是没有睡好了,,,下面 解释一下分页吧。

    Java后端的分页,要看 前端的需求,,有些他们需要 返回 pageALL 即总页数,, 有些不需要,只需要 总数即可。 前端 请求后端需要 带过来 页数,和 每页的 数据 条数,我们就可以后台分页了。。。 这里不说 什么 物理分页,,,内存分页,,这些 只需要 集成了 分页插件, 都会帮我 们搞定了,,,这里 只说 原生的 mysql limit 分页 实现的。

    一般 分页 是很简单的代码的:

    @Override public JSONObject findAssetAll(int page, int rows) { // 分页逻辑处理 if (page == 0) { page = 1;// 为了防止0页的情况发生 } int num = 0; if (page == 1) { num = 0; } else {

    		num = rows * (page - 1);
    	}
    	Example example=new Example(Asset.class);
    	int total=assetMapper.selectCountByExample(example);
    	
    	String selectSql="asset_id desc limit "+num+" , "+rows;
    	
    	example.setOrderByClause(selectSql);
    	List<Asset> assets=assetMapper.selectByExample(example);
    
    public class PagerLimit {
    
    	public static void main(String[] args) {
    		
    		int page = 2; //页数
    		int rows = 7; // 即 pageSize
    		
    		// 分页逻辑处理
    		if (page == 0) {
    			page = 1;// 为了防止0页的情况发生
    		}
    		int num = 0;
    		if (page == 1) {
    			num = 0;
    		} else {
    
    			num = rows * (page - 1);
    		}
    		
    		System.out.println(">>>page>>"+page);
    		//  num =7 rows =7 反推出  page
    		System.out.println(">>>>offset>>"+num);
    		
    		// 反算出 当前的需要的 页数 
    		System.out.println(num/rows +1);
    		
    		
    	}
    
    }
    
    

    上面没有计算出总 页数,其实并不难计算出来的。。。这里不说明了。百度吧

    我今天下午掉进坑里了,,,把limit 的 用法 搞混了,,, 忘记了,,

    比如 limit 1,3 不是求出 1到 3 的 数据,,,不是 2条数据。。 而是求出 从1 开始的 后台 3条 数据,如果有的话,,,即使 3条数据。 pageSize 就是 对应 limit 的 最后 一个 数字 即 3 的数字。。。

    我这个项目 的分页 的实现有点 不一样的。 前端会根据总数和页数 直接帮我们计算出来 MySQL limit的 2个 数字,后端直接 拿到了 数据了。 直接 放入 SQL里面 limit 就执行就可以了。。。

    是挺方便的,可是目前我要集成 分页插件的时候,就郁闷了,,分页插件 需要 放入 page 页数的值的。 即 这样就可以了 将 查询的 起始偏移量 除以 rows 即 每页的数据量 再加 1 即可以取得 正确的 页数的。。 就可以了,,,就可以放心的 集成 分页插件了

    page  =  num/rows +1
    

    最后

    逻辑分页即是 查询出来 总数据量,然后 分页,,,数据多的话很不好的 limit 就是 物理分页,包括 分页插件也是 物理分页的,,,mybatis 自带的分页是逻辑分页因此 会使用第三方的分页插件 。

    逻辑分页代码有兴趣可以看看:

    package test.page;
    
    import java.io.Serializable;
    import java.util.List;
    
    public class Pager<T> implements Serializable {
    	
    	public static void main(String[] args) {
    		
    	}
    	
    
    	private static final long serialVersionUID = -8741766802354222579L;
    	
    	private int pageSize; // 每页显示多少条记录
    	
    	private int currentPage; //当前第几页数据
    	
    	private int totalRecord; // 一共多少条记录
    	
    	private int totalPage; // 一共多少页记录
    	
    	private List<T> dataList; //要显示的数据
    	
    	public Pager(int pageNum, int pageSize, List<T> sourceList){
    		if(sourceList == null || sourceList.isEmpty()){
    			return;
    		}
    		
    		// 总记录条数
    		this.totalRecord = sourceList.size();
    		
    		// 每页显示多少条记录
    		this.pageSize = pageSize;
    		
    		//获取总页数
    		this.totalPage = this.totalRecord / this.pageSize;
    		if(this.totalRecord % this.pageSize !=0){
    			this.totalPage = this.totalPage + 1;
    		}
    		
    		// 当前第几页数据
    		this.currentPage = this.totalPage < pageNum ?  this.totalPage : pageNum;
    				
    		// 起始索引
    		int fromIndex	= this.pageSize * (this.currentPage -1);
    		
    		// 结束索引
    		int toIndex  = this.pageSize * this.currentPage > this.totalRecord ? this.totalRecord : this.pageSize * this.currentPage;
    				
    		this.dataList = sourceList.subList(fromIndex, toIndex);
    	}
    	
    	public Pager(){
    		
    	}
    
    	public Pager(int pageSize, int currentPage, int totalRecord, int totalPage,
    			List<T> dataList) {
    		super();
    		this.pageSize = pageSize;
    		this.currentPage = currentPage;
    		this.totalRecord = totalRecord;
    		this.totalPage = totalPage;
    		this.dataList = dataList;
    	}
    
    	public int getPageSize() {
    		return pageSize;
    	}
    
    	public void setPageSize(int pageSize) {
    		this.pageSize = pageSize;
    	}
    
    	public int getCurrentPage() {
    		return currentPage;
    	}
    
    	public void setCurrentPage(int currentPage) {
    		this.currentPage = currentPage;
    	}
    
    	public int getTotalRecord() {
    		return totalRecord;
    	}
    
    	public void setTotalRecord(int totalRecord) {
    		this.totalRecord = totalRecord;
    	}
    
    	public int getTotalPage() {
    		return totalPage;
    	}
    
    	public void setTotalPage(int totalPage) {
    		this.totalPage = totalPage;
    	}
    
    	public List<T> getDataList() {
    		return dataList;
    	}
    
    	public void setDataList(List<T> dataList) {
    		this.dataList = dataList;
    	}
    
    }
    
    

    转载于:https://my.oschina.net/ouminzy/blog/1476638

    展开全文
  • java实现后端分页

    千次阅读 2019-06-26 14:43:25
    java实现后端分页 通过分页工具类(Page)来实现,具体参考代码参见下面链接. https://www.cnblogs.com/lixiang1993/p/7360404.html mapper.xml文件中的分页查询语句如下: 一、Mysql使用limit分页 select * from stu ...

    java实现后端分页

    通过分页工具类(Page)来实现,具体参考代码参见下面链接.
    https://www.cnblogs.com/lixiang1993/p/7360404.html
    mapper.xml文件中的分页查询语句如下:
    一、Mysql使用limit分页
    select * from stu limit m, n; //m = (startPage-1)pageSize,n = pageSize
    PS:
    (1)第一个参数值m表示起始行,第二个参数表示取多少行(页面大小)
    (2)m= (2-1)10,n=10 ,表示 limit 10,10从11行开始,取10行,即第2页数据。
    (3)m、n参数值不能在语句当中写计算表达式,写到语句之前必须计算好值。
    二、Oracle使用rownum分页
    select * from (
    select rownum rn,a.
    from table_name a where rownum <= x //结束行,x = startPage
    pageSize
    )
    where rn >= y; //起始行,y = (startPage-1)*pageSize+1
    PS:
    (1)>= y,<= x表示从第y行(起始行)~x行(结束行) 。
    (2)rownum只能比较小于,不能比较大于,因为rownum是先查询后排序的,例如你的条件为rownum>1,当查询到第一条数据,rownum为1,则不符合条件。第2、3…类似,一直不符合条件,所以一直没有返回结果。所以查询的时候需要设置别名,然后查询完成之后再通过调用别名进行大于的判断。
    --------原文:https://blog.csdn.net/justinqin/article/details/77861867

    展开全文
  • java后端分页

    2020-11-18 16:29:43
    public static int[] page(int count, int sideNum, int pageNum,int everyPage) { int pageCount = (count%everyPage==0)?count/everyPage:(count/everyPage+1); //总页数 //其实页 int startNum = 0; //结束...
  • Java如何实现后端分页

    千次阅读 2017-04-19 21:31:02
    工具:myeclipse ,数据库:Oracle ,jar包:classes12.jar 实现的功能:对客户的增删改查,展示客户列表,一页显示十条...2,后端分页技术 3,ajax前后台交互 代码如下: /** *客户接口类 */ public interface
  • 下面是使用java 后端的for循环实现的简单的分页,方法仅供参考,具体逻辑需要实际应用去做调整和修改,亲测改方式可行,需要根据具体的逻辑调整后实现。 代码只是核心的参考实例 pageParam是前段传的对应的分页...
  • java后端内存分页

    2019-09-22 14:23:58
    retMap.put("pageNo", 0); retMap.put("pageRowNum", 0); retMap.put("totalRowNum", 0); retMap.put("totalPageNum", 0); return retMap; } int totalRowNum = list.size(); int totalPageNum = (totalRowNum - 1)...
  • java后端分页方案

    2018-12-05 13:45:00
    第一种分页(用sql分页) public static int[] getStartEndPage(int page, int limit) { int startPage = (page - 1) * limit + 1; int endPage = page * limit...
  • 本篇文章主要实现分页和查询功能 效果展示: 下拉框遍历: 查找效果 1.pom.xml配置 <!--pageHelper--> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>...
  • import com.github.pagehelper.Page; ... ... ...import org.apache.ibatis.annotations.Param;...import java.util.List; public interface MappedMapper { //分页查询 Page findByPage(MappedVO mappedVO); }
  • 不管运用什么技术,分页无非就是前端分页或后端分页,也就是所谓的假分页与真分页。不过,按照常规来说,最好还是后端分页。假设有数万条数全部返回到前端,前端再进一步逻辑分页,可想而知响应到客户的视图界面需要...
  • PageHelper分页 1.如果要查询的实体类和返回的对象是同一个实体类就用这种方式 public PageInfo<A> queryToCancelTransV2(String userId,Integer pageNum, Integer pageSize) throws ParseException { if...
  • 分页有物理分页和逻辑分页之分。物理分页是使用数据库本身提供的分页操作来完成数据查询,查询到的就是当前页的信息。例如mysql数据库可以使用limit,oracle数据库可以使用rownum来完成。逻辑分页是把数据库中所有的...
  • 实质上是后端分页,前端只是显示页码、联调 不足:页码太多,也会逐个显示,不能跳转页码,没有选择中当前页码 <%@page contentType="text/html"%> <%@page pageEncoding="UTF-8"%> <!DOCTYPE ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,138
精华内容 2,855
关键字:

java后端实现分页page

java 订阅