sql分页:springboot项目之数据库分页SQL实现

 2021-07-01 14:50    77  

在面对大批量数据查询的时候,如果一次性全部查出来的话,即便是查询方法再怎么做优化,都会遇到数据量大这个瓶颈,有时候一次查询会非常耗时,在web项目中甚至会造成查询超时,进而会影响到用户使用体验sql分页。这个时候就要用到分页查询,避免大量数据一次性查询造成阻塞。下面基于springboot项目介绍使用SQL分页,和springmvc中GET方法传递参数,完成前后端数据分页的查询。建议入门级小白阅读,大神请略过。

sql分页:springboot项目之数据库分页SQL实现

项目环境sql分页:springboot + mybatis + postgresql

使用SQL分页,主要就是两个参数,一个是pageSize,另一个是pageIndex,分别代表分页的每一页有多少条数据和页码的索引,也就是第几页sql分页。

SQL分页mapper.xml文件中SQL代码为:

<!-- 分页查询(无查询条件) 根据id倒序排列 --><select id="pagingSelectByUnconditional" resultType="meicius.ori.pojo.Selary ">         (SELECT * FROM "base".selary limit ${pageSize} OFFSET ${index}) order by id desc ;</select>mapper (dao)对应接口中的代码为:

public List<Selary> pagingSelectByUnconditional(@Param("pageSize") int pageSize, @Param("index") int index);service接口和实现类中对应代码为:

//service接口public List<Selary> pagingSelectByUnconditional(@Param("pageSize") int pageSize, @Param("index") int index); //service实现类@Overridepublic List<Selary> pagingSelectByUnconditional(int pageSize, int index) {        return selaryMapper.pagingSelectByUnconditional(pageSize, index);}这样就可以在controller中查询出该页码上的数据了。但是这样并不是完整的,因为这样只返回了当前页的数据,还需要返回一共有多少条数据,所以还需要再进行一次有多少条数据的SQL查询。这里只给出查询的SQL语句:

SELECT COUNT(id) FROM "base".Selary;将查询总数返回的数据和查询该页的数据一起返回给前端页面。

springmvc GET方法传递参数查询在controller中使用GET方法查询,pageSize和pageIndex(代码中我使用index)参数写在url中。

controller中接收参数有不同的方式,但是基本都是通过不同的注解完成。下面逐一介绍:

1)@RequestMapping注解

@RequestMapping(value= "/pagingselectbyunconditional", method = RequestMethod.GET)public Result pagingSelectByUnconditional(int pageSize, int index){ Map<String, Object> stringObjectMap = new HashMap<String, Object>();       try{ stringObjectMap.put("total", selaryImpl.getselaryTableCount()); stringObjectMap.put("result", selaryImpl.pagingSelectByUnconditional(pageSize, index)); stringObjectMap.put("pageSize", pageSize); stringObjectMap.put("pageIndex", index); result.returnSuccess(stringObjectMap);       }catch (Exception e){           result.returnError();       }finally {           return result;       }这里直接在方法的形参中写入参数,此时url为:

:ip/pagingselectbyunconditional?pageSize=10&index=0

可以直接解析出url中的pageSize和index

2)@RequestParams注解

@RequestMapping(value = "/pagingselectbyunconditional", method = RequestMethod.GET)public Result pagingSelectByUnconditional(@RequestParam("pageSize") int pg, @RequestParam("index") int in){ Map<String, Object> stringObjectMap = new HashMap<String, Object>(); try{ stringObjectMap.put("total", selaryImpl.getselaryTableCount());          stringObjectMap.put("result", selaryImpl.pagingSelectByUnconditional(pageSize, index));          stringObjectMap.put("pageSize", pageSize);          stringObjectMap.put("pageIndex", index);          result.returnSuccess(stringObjectMap);       }catch (Exception e){            result.returnError();       }finally {            return result;       }}@RequestParams注解会解析url中的pageSize和index,

此时url为::ip/pagingselectbyunconditional?pageSize=10&index=0

注意@RequestParams括号中的参数一定要和url中的对应。

3)@PathVariable注解

@RequestMapping(value = "/pagingSelectByUnconditional/{pageSize}/{index}", method = RequestMethod.GET) public Result pagingSelectByUnconditional(@PathVariable ("pageSize") int pg, @PathVariable("index") int in){ Map<String, Object> stringObjectMap = new HashMap<String, Object>(); try{            stringObjectMap.put("total", selaryImpl.getselaryTableCount());            stringObjectMap.put("result", selaryImpl.pagingSelectByUnconditional(pageSize, index));            stringObjectMap.put("pageSize", pageSize);            stringObjectMap.put("pageIndex", index);            result.returnSuccess(stringObjectMap);        }catch (Exception e){            result.returnError();        }finally {            return result;        }}@PathVariable会按顺序解析url中的参数,此时url为:

:ip/ori/orbitczmlpath/pagingselectbyunconditional/10/0

注意此时@RequestMapping中的value

最后附上一张请求成功的图片

请求结果

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

关注我,持续为您推荐在springboot项目中使用到的技术,遇到的问题。此外还会推荐前端Vue项目、分享整个前后端项目的搭建,完成过程中使用到的技术、遇到的问题。本项目要做一个卫星综合显示平台,后续会详细介绍本次项目,同时也会在git上分享,服务上线公网访问。

本文标签:实现数据库SpringBoot

原文链接:https://www.xgfox.com/jsyd/244.html

本文版权:如无特别标注,本站文章均为原创。