英语做课后作业的网站,深圳品牌咨询公司,哪些网站做物流推广好,网站开发的未来发展趋势物理分页和逻辑分页 物理分页#xff1a;直接从数据库中拿出我们需要的数据#xff0c;例如在Mysql中使用limit。 逻辑分页#xff1a;从数据库中拿出所有符合要求的数据#xff0c;然后再从这些数据中拿到我们需要的分页数据。 优缺点 物理分页每次都要访问数据库#xf… 物理分页和逻辑分页 物理分页直接从数据库中拿出我们需要的数据例如在Mysql中使用limit。 逻辑分页从数据库中拿出所有符合要求的数据然后再从这些数据中拿到我们需要的分页数据。 优缺点 物理分页每次都要访问数据库逻辑分页只访问一次。 物理分页占用内存少逻辑分页相对较多。 物理分页数据每次都是最新的逻辑分页有可能滞后。 一般用法 1 public ListOrder queryListByPage(RowBounds rowBounds); 1 dao.queryListPage(new RowBounds(offset,limit)); RowBounds对象有2个属性offset和limit。 offset:起始行数 limit需要的数据行数 因此取出来的数据就是从第offset1行开始取limit行 Mybatis中使用RowBounds实现分页的大体思路 先取出所有数据然后游标移动到offset位置循环取limit条数据然后把剩下的数据舍弃。 1 private void handleRowValuesForSimpleResultMap(ResultSetWrapper rsw, ResultMap resultMap, ResultHandler? resultHandler, RowBounds rowBounds, ResultMapping parentMapping) throws SQLException {2 DefaultResultContextObject resultContext new DefaultResultContext();3 this.skipRows(rsw.getResultSet(), rowBounds); //游标跳到offset位置4 //取出limit条数据5 while(this.shouldProcessMoreRows(resultContext, rowBounds) rsw.getResultSet().next()) {6 ResultMap discriminatedResultMap this.resolveDiscriminatedResultMap(rsw.getResultSet(), resultMap, (String)null);7 Object rowValue this.getRowValue(rsw, discriminatedResultMap);8 this.storeObject(resultHandler, resultContext, rowValue, parentMapping, rsw.getResultSet());9 }
10
11 } 1 private void skipRows(ResultSet rs, RowBounds rowBounds) throws SQLException {2 if (rs.getType() ! 1003) {3 if (rowBounds.getOffset() ! 0) {4 rs.absolute(rowBounds.getOffset());5 }6 } else { //从头开始移动游标直至offset位置7 for(int i 0; i rowBounds.getOffset(); i) {8 rs.next();9 }
10 }
11
12 } 在Mybatis-Plus中的应用 Controller层 1 RequestMapping(value list, method { RequestMethod.GET, RequestMethod.POST })2 PageableDefaults(sort createDatedesc)3 private void getList(Queryable queryable,String queryStr, PropertyPreFilterable propertyPreFilterable, HttpServletRequest request,4 HttpServletResponse response) throws IOException {5 //前端传过来需要的参数加上idfastjson会在得到结果集时过滤数据6 propertyPreFilterable.addQueryProperty(id);7 QueryableConvertUtils.convertQueryValueToEntityValue(queryable, entityClass);8 SerializeFilter filter propertyPreFilterable.constructFilter(entityClass);9 //调用service层的分页查询
10 PageJsonOprPrintOrder pagejson new PageJsonOprPrintOrder(service.list(queryable));
11 //得到需要的结果集后的数据过滤操作
12 String content JSON.toJSONString(pagejson, filter);
13 JSONObject result JSONObject.parseObject(content);
14 StringUtils.printJson(response, result.toString());
15 } Service层 1 Override2 public PageOrder list(Queryable queryable) {3 //pageable中有数据查询的要求4 Pageable pageable queryable.getPageable();5 //封装新的分页查询类6 com.baomidou.mybatisplus.plugins.PageOrder page new com.baomidou.mybatisplus.plugins.PageOrder(pageable.getPageNumber(), pageable.getPageSize());7 //传入RowBoundspage就是RowBounds的子类这样查询后page就有了总页数与总条数8 page.setRecords(mapper.selectList(page));9 return new PageImplOrder(page.getRecords(), pageable, page.getTotal());
10 } Mapper层 1 ListOrder selectList(RowBounds rowBounds); 1 select idselectList resultTypeOrder
2 select * from order
3 /select 转载于:https://www.cnblogs.com/guanghe/p/10026099.html