springboot集成mybatisplus分页_mybatis分页查询原理

springboot集成mybatisplus分页_mybatis分页查询原理1、导入依赖(maven)pom.xml<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>${pagehelper-mybat…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

1、导入依赖(maven)

pom.xml


<dependency>
	<groupId>com.github.pagehelper</groupId>
	<artifactId>pagehelper-spring-boot-starter</artifactId>
	<version>${pagehelper-mybatis.version}</version>
</dependency>

2、添加配置


aplication-dev.properties

#mybatis配置

mybatis.mapper-locations= classpath:mapper/**/*.xml
mybatis.type-aliases-package=com.powater.entity
# 数据库连接类型
# 插件配置 pagehelper

pagehelper.helperDialect=mysql
# 分页合理化参数,默认值为false。当该参数设置为 true 时,pageNum<=0 时会查询第一页, pageNum>pages(超过总数时),会查询最后一页
pagehelper.reasonable=true
# 支持通过 Mapper 接口参数来传递分页参数
pagehelper.supportMethodsArguments=true


logging.level.com.powater.dao=debug

3、添加类Page

public class Page { 
   
    private Integer currentPage;
    private Integer pageSize;
    private Integer totalPage;
    private Long totalSize;

    public Page(Integer currentPage, Integer pageSize) { 
   
        this.currentPage = currentPage;
        this.pageSize = pageSize;
    }

    public Integer getCurrentPage() { 
   
        return this.currentPage;
    }

    public void setCurrentPage(Integer currentPage) { 
   
        this.currentPage = currentPage;
    }

    public Integer getPageSize() { 
   
        return this.pageSize;
    }

    public void setPageSize(Integer pageSize) { 
   
        this.pageSize = pageSize;
    }

    public Integer getTotalPage() { 
   
        return this.totalPage;
    }

    public void setTotalPage(Integer totalPage) { 
   
        this.totalPage = totalPage;
    }

    public Long getTotalSize() { 
   
        return this.totalSize;
    }

    public void setTotalSize(Long totalSize) { 
   
        this.totalSize = totalSize;
    }
}

4、添加类PageInfoListResult


import java.util.List;

public class PageInfoListResult<T> { 
   
    private List<T> dataList;
    private Page page;

    public PageInfoListResult() { 
   
    }

    public List<T> getDataList() { 
   
        return this.dataList;
    }

    public void setDataList(List<T> dataList) { 
   
        this.dataList = dataList;
    }

    public Page getPage() { 
   
        return this.page;
    }

    public void setPage(Page page) { 
   
        this.page = page;
    }
}

5、添加工具类中的方法


public class CommonUtil(){ 
   

	 public static <T> PageInfoListResult<T> makePageListResult(Page page, List<T> dataList) { 
   
                PageInfoListResult<T> pageInfoListResult = new PageInfoListResult();
                //这是自己new的一个Page对象,用来存放分页信息
                com.powater.common.bean.Page definePage = new com.powater.common.bean.Page(page.getPageNum(), page.getPageSize());
                definePage.setTotalSize(page.getTotal());
                definePage.setTotalPage(page.getPages());
                pageInfoListResult.setDataList(dataList);
                pageInfoListResult.setPage(definePage);
                return pageInfoListResult;
            }
            
}

6、在service层使用


@Override
	public PageInfoListResult getFloodRecordList(RecordSearchBean recordSearchBean,int level,String userCode) { 
   

		//业务逻辑就不展示在这了 ,尽量简化代码,容易看懂,这里是一个固定的用法,
		//PageHelper.startPage(recordSearchBean.getCurrentPage(),recordSearchBean.getPageSize());
		//RecordSearchBean类 (查询条件类)中有两个属性 ,currentPage当前页号,pageSize页面放多少条数据
		//WaterForecastRecord 实体类
		Page page = PageHelper.startPage(recordSearchBean.getCurrentPage(),recordSearchBean.getPageSize());
		//PageHelper下面紧跟着就进行数据的查询
		List<WaterForecastRecord> list = waterForecastRecordMapper.selectRecordList(recordSearchBean);
		//下面是将查到实体类中的数据转到WaterForecastRecordDTO 类中,因为我这mybatis sql语句返回的是WaterForecastRecord,如果sql语句返回的是WaterForecastRecordDTO就不用转,下面代码就用不到
		/* if(list != null){ List<WaterForecastRecordDTO> waterForecastRecordDTOList = GeneralUtil.convertList(list,WaterForecastRecordDTO.class); return CommonUtil.makePageListResult(page,waterForecastRecordDTOList); } return null; */
		 return CommonUtil.makePageListResult(page,waterForecastRecordDTOList);



	}

使用就是这些, 前端要传pageSize currentPage过来,后台controller层直接返回service返回的PageInfoListResult 就可以,下面记录下我在使用mybatis分页插件时碰到的一个问题

1、背景(直接上代码)


public class CommonUtil(){ 
   
	public static <T> PageInfoListResult<T> makePageListResult(Integer currentPage, Integer pageSize, List<T> dataList) { 
   
        PageInfoListResult<T> pageInfoListResult = new PageInfoListResult();
        Page page = new Page(currentPage, pageSize);
        PageInfo pageInfo = new PageInfo(dataList);
        page.setTotalPage(pageInfo.getPages());
        page.setTotalSize(pageInfo.getTotal());
        pageInfoListResult.setDataList(dataList);
        pageInfoListResult.setPage(page);
        return pageInfoListResult;
    }


}

	说明:原先我的工具类中分页方法是这样写的,自己new了一个page对象(看代码吧,感觉我也讲不太清)
service层

@Override
	public PageInfoListResult getFloodRecordList(RecordSearchBean recordSearchBean,int level,String userCode) { 
   

		PageHelper.startPage(recordSearchBean.getCurrentPage(),recordSearchBean.getPageSize());
		//PageHelper下面紧跟着就进行数据的查询
		List<WaterForecastRecord> list = waterForecastRecordMapper.selectRecordList(recordSearchBean);
		
		if(list != null){ 
   
			List<WaterForecastRecordDTO> waterForecastRecordDTOList = GeneralUtil.convertList(list,WaterForecastRecordDTO.class);
			
            return CommonUtil.makePageListResult(page,waterForecastRecordDTOList);
		}

		return null;
		


	}


	说明:这是我当时的service层,从数据库中拿到了实体类的list,然后用GeneralUtil.convertList(list,WaterForecastRecordDTO.class);
	这个方法将数据转移到waterForecastRecordDTOList 中,这个时候
	PageHelper.startPage(recordSearchBean.getCurrentPage(),recordSearchBean.getPageSize());我是没有用Page接收的,
	问题就是我对从数据库查到的数据进行了转移,在PageInfoListResult中放我从数据库中查到的数据是正常的,
	但我放我转移后的list分页是有问题的,totalSize和数据库中符合条件数据数不符,
	具体表现:currentPage:1 pageSize:10 (数据库中符合查询条件的数据有十二条),查询结果:totalSize:10 totalPage:1
			currentPage:1 pageSize:20 (数据库中符合查询条件的数据有十二条),查询结果:totalSize:12 totalPage:1
	但期望的结果是不管你传过来的currentPage,pageSize是多少,totalSize都应该是12(数据库中符合查询条件的数据数量),
	经过一番努力:大概能猜到是什么原因
	原因:在工具类中的方法中有这样有段代码 PageInfo pageInfo = new PageInfo(dataList);
	这个dataList 是直接从数据库中查到的数据分页是没问题的,但换成了转移之后的list就有问题,问题大概就出现在查询数据这里了,具体不太了解
	解决办法 :
	PageHelper.startPage(recordSearchBean.getCurrentPage(),recordSearchBean.getPageSize());返回的是一个Page(分页信息在这个对象中)
	可以用一个Page来接收分页参数,即:Page page = PageHelper.startPage(recordSearchBean.getCurrentPage(),recordSearchBean.getPageSize());
	以此来保存分页信息,然后传到工具类的方法中进行处理,具体做法见最开始的分页插件使用方法

GeneralUtil类

public class GeneralUtil(){ 
   

	public static <T, S> List<T> convertList(List<S> src, Class<T> targetType) { 
   
	        List<T> target = new Vector();
	        Iterator var3 = src.iterator();
	
	        while(var3.hasNext()) { 
   
	            S s = var3.next();
	            T t = BeanUtils.instantiateClass(targetType);
	            BeanUtils.copyProperties(s, t);
	            target.add(t);
	        }
	
	        return target;
	    }


}


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/194202.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java安装下载步骤_java下载安装教程

    java安装下载步骤_java下载安装教程java下载安装教程首先,我们可能需要查看一下电脑的配置信息,单击开始按钮选择系统,一般我们只需要关注是多少位的系统,还有是windows或Linux即可,如图:推荐教程:《java学习》在网络畅通的情况下,在任意浏览器都可以查找java的下载链接,我这边的链接是http://www.oracle.com/technetwork/java/javase/downloads/index.html,输…

    2022年7月7日
    27
  • 【日常】如何将微信中对方所撤回的消息恢复?——电脑PC端微信教程:附源码[通俗易懂]

    【日常】如何将微信中对方所撤回的消息恢复?——电脑PC端微信教程:附源码[通俗易懂]1前言寻找微信撤回的图片是不少人一直在寻找的方法但苦于在网上一直找不到结果因此本文提出了一种可以找到微信撤回图片的方法。区别于网上其他的不可用代码,本文能成功恢复!2原理之前的说法是,工程师并没有真正把撤回的图片删除,而是加密后藏起来了。其实这样说并不严谨,经过后续测试,发现PC端的确如此,而手机端(Android)撤回的图片是有删除的,但是删除的不干净。2.1PC端微信所有接收到的图片都储在:C:\Users\你的用户名\Documents\WeChatFiles\wxid_你

    2022年6月23日
    57
  • resque 遍历加载job目录下的类

    resque 遍历加载job目录下的类

    2022年2月21日
    42
  • readprocessmemory函数库_read_csv函数

    readprocessmemory函数库_read_csv函数ReadProcessMemory函数ReadProcessMemory函数功能描述:该函数用来读取指定进程的空间的数据,此空间必须是可以访问的,否则读取操作会失败!函数原型BOOLReadProcessMemory(HANDLEhProcess,//目标进程句柄LPCVOIDlpBaseAddress,//读取数据的起始地址LPVOIDlpBuffer,//存放数据的缓存区地址DW…

    2022年10月5日
    2
  • python字符串比较大小[通俗易懂]

    python字符串比较大小[通俗易懂]理解原理和相关知识字符串按位比较,两个字符串第一位字符的ascii码谁大,字符串就大,不再比较后面的;第一个字符相同就比第二个字符串,以此类推,需要注意的是空格的ascii码是32,空(null)的ascii码是0https://zhidao.baidu.com/question/558202137825309252.htmlord函数接受一个字符print(max([‘1’,’…

    2022年6月18日
    39
  • Netty权威指南学习笔记

    Netty权威指南学习笔记最近花了一段时间系统的学习了Netty框架,包括《NettyinAction》以及《Netty权威指南》,对于博主自己来说,我觉得《Netty权威指南》要更适合博主。很厚的《Netty权威指南》权威指南,虽然上面一大部分是例子代码,当然有种跟着Netty官网学小demo的感觉。好记性不如烂笔头,所有代码均手抄Maven实现了一遍,所有例子均可运行,当然自己的学习笔记。Chapter2…

    2022年10月2日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号