Mybatis分页插件PageHelper查询ORACLE数据库示例

总之,可以手动配置,也可以不手动配置,PageHelper会自动分辨出数据库类型(支持的范围内)

并且mybatis是count先select后,也就是说count出数据才会继续select,这点避免了无效查询,有时候光看日志时这点容易被坑。

 和数据源是mysql一样,PageHelper可以自动识别出来并通过不同的代理方法去分页~

	public List<Map<String, Object>> getCarByNo(String plateno, int pagenum, int pagesize) {
		// TODO Auto-generated method stub
		List<Map<String, Object>> list = null;
		
			String start =(pagenum-1)*pagesize+1+"";
			String end = pagenum*pagesize+"";
			
			list = mapper.getCarByNo(plateno,start,end);
	
		return list;
	}

 

serivice的编写 


参数一传入车辆编号,参数二传入页数,参数三传入每页个数

解释:String start =(pagenum-1)*pagesize+1

例如页数传入1,(1-1)*5+1 =1 起始数据就是为1,每页个数为5,所以开始就是第一行开始

例如页数传入5,(5-1)*5+1=21 起始数据就是为5,每页个数为5,所以开始的第一行就是21

解释:String end = pagenum*pagesize

例如页数传1,他的结束条数就是第5条

例如页数传5,他的结束条数就是第25条

MapperDao的编写

List<Map<String, Object>> getCarByNo(@Param("plateno")String plateno, @Param("start")String start, @Param("end")String end);

没什么要太注意的

MapperXML的编写

select * from(
	select t.*,rownum rn from(
		select *
		  from VRESOURCE_CAR c
		 where c.PLATENO like concat(concat('%',#{plateno,jdbcType=VARCHAR}),'%')) t
		 where rownum &lt; #{end,jdbcType=INTEGER}
		)
		where rn &gt;#{start,jdbcType=INTEGER}

主要要理解这种分页的中心思想,首先他是先去查所有符合条件的数据

然后再去取这堆数据的结束点或者是结束行,这些数据再作为一个表去查询

再去用这个表查询起始行到结束行的条数,就这么简单的完成啦

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

PageHelp的使用小示例


以下使用springboot做为演示,首先添加依赖
 

		<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter -->
		<dependency>
			<groupId>com.github.pagehelper</groupId>
			<artifactId>pagehelper-spring-boot-starter</artifactId>
			<version>1.2.5</version>
		</dependency>
	</dependencies>

Controller

	@ApiOperation("ehcache分页查询")
	@GetMapping("pagefind")
	public List<Map<String, Object>> pagefind(int page,int size){
		return ehcacheservice.pagefind(page,size);
		
	}

Service

	public List<Map<String, Object>> pagefind(int page, int size) {
		
		PageHelper.startPage(page, size);//重点就这一行代码
		
		return ehcachemapper.findpage();
	}

这样就可以返回所输入参数的分页。。。。但是返回的值只有数据没有总数。

下面是小进阶

	public Map<String, Object> pagefind(int page, int size) {
		
		PageHelper.startPage(page, size);//重点就这一行代码,下行紧跟查询语句
		
		List<Map<String, Object>> findpage = ehcachemapper.findpage();
		
		PageInfo<Map<String, Object>> pageInfo = new PageInfo<>(findpage);//传入Pagehelper提供的类获取参数信息
		
		HashMap<String, Object> map = new HashMap<>();//新建一个map装填数据
		
		map.put("list", findpage);
		
		map.put("total", pageInfo.getTotal());//获取数据总数
		
		map.put("size", pageInfo.getPageSize());//获取长度
		
		map.put("page", pageInfo.getPageNum());//获取当前页数
		
		return map;
	}

这样就完美啦

本人测试不用配置Bean或者properties信息也能正常分页查询,如果出现什么问题可以考虑一下设置配置bean

发布了61 篇原创文章 · 获赞 54 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/bibiboyx/article/details/96877356