当前位置: 首页 > news >正文

一个电商网站的网页制作石龙东莞网站建设

一个电商网站的网页制作,石龙东莞网站建设,招聘网页模板,怎么更改网站的备案号pagehelper 关闭count(0)查询 以及pagehelper的分页原理分析 情景再现#xff1a;在给移动端提供分页查询数据接口时#xff0c;知道他们不需要总条数。但是使用pagehelper 分页查询打印的sql总是会查询两次#xff0c;先统计条数#xff0c;在进行列表查询。对于有点强迫…pagehelper 关闭count(0)查询 以及pagehelper的分页原理分析 情景再现在给移动端提供分页查询数据接口时知道他们不需要总条数。但是使用pagehelper 分页查询打印的sql总是会查询两次先统计条数在进行列表查询。对于有点强迫症的我来说很不爽。于是开始查资料追源码。 于是找到了pagehelper的分页对象 com.github.pagehelper.Page 其中一个属性count默认是true默认会执行count查询/*** 包含count查询*/private boolean count true;1.关闭count查询 在执行分页列表查询前添加 PageHelper.startPage(page, size, false); 成功关闭count查询 PageHelper中的其他方法也可以关闭count查询请读者自行查阅 2.抛出问题 本来事情到此已经完美解决但是因为我们是自己定义了一个Page对象其实就是com.github.pagehelper.Page写在本地的一个pojo。查询的条件封装在一个对象中并继承自定义的Page然后尝试在自定义的Page中设置count为false发现并不能生效。 3.原因查找 1在com.github.pagehelper.util.PageObjectUtil类中下面方法中找到了设置count属性的逻辑 调用getParamValue(paramsObject, “count”, false); public static T PageT getPageFromObject(Object params, boolean required) {......//count查询Object _count getParamValue(paramsObject, count, false);if (_count ! null) {page.setCount(Boolean.valueOf(String.valueOf(_count)));}//排序if (hasOrderBy) {page.setOrderBy(orderBy.toString());}//分页合理化Object reasonable getParamValue(paramsObject, reasonable, false);if (reasonable ! null) {page.setReasonable(Boolean.valueOf(String.valueOf(reasonable)));}//查询全部Object pageSizeZero getParamValue(paramsObject, pageSizeZero, false);if (pageSizeZero ! null) {page.setPageSizeZero(Boolean.valueOf(String.valueOf(pageSizeZero)));} }2从下图中的debug中可以看出getParamValue(paramsObject, “count”, false); 返回null修改count属性失败 3分析问题 使用PageHelper设置属性就能生效是因为PageHelper设置属性的时候创建了一个本地的Page对象并存储到本地。如下面的代码 类位置com.github.pagehelper.page.PageMethod/*** 开始分页** param pageNum 页码* param pageSize 每页显示数量* param count 是否进行count查询*/public static E PageE startPage(int pageNum, int pageSize, boolean count) {return startPage(pageNum, pageSize, count, null, null);}....../*** 开始分页** param pageNum 页码* param pageSize 每页显示数量* param count 是否进行count查询* param reasonable 分页合理化,null时用默认配置* param pageSizeZero true且pageSize0时返回全部结果false时分页,null时用默认配置*/public static E PageE startPage(int pageNum, int pageSize, boolean count, Boolean reasonable, Boolean pageSizeZero) {PageE page new PageE(pageNum, pageSize, count);page.setReasonable(reasonable);page.setPageSizeZero(pageSizeZero);//当已经执行过orderBy的时候PageE oldPage getLocalPage();if (oldPage ! null oldPage.isOrderByOnly()) {page.setOrderBy(oldPage.getOrderBy());}setLocalPage(page);return page;}在进行判断是否进行count查询的时候查找的是PageHelper中的page对象所以设置的属性能够生效 2)在com.github.pagehelper.PageInterceptor中有是否执行count查询的条件Overridepublic Object intercept(Invocation invocation) throws Throwable {......//判断是否需要进行 count 查询if (dialect.beforeCount(ms, parameter, rowBounds)) {String countMsId msId countSuffix;Long count;//先判断是否存在手写的 count 查询........}} 类位置com.github.pagehelper.dialect.AbstractHelperDialect#beforeCountOverridepublic boolean beforeCount(MappedStatement ms, Object parameterObject, RowBounds rowBounds) {Page page getLocalPage();return !page.isOrderByOnly() page.isCount();}page.isOrderByOnly() boolean类型 默认falsepage.isCount()默认true所以修改了page.isCount()为false 后能够关闭count0查询 4.讨论一个问题为什么使用本地对象也能够使PageHelper 进行分页 有下面方法可知只要参数中有pageSize和pageNumPageHelper 就会自动创建PageHelper 中的pege对象 实现分页逻辑。 路径com.github.pagehelper.util.PageObjectUtil#getPageFromObject public static T PageT getPageFromObject(Object params, boolean required) { ......try {Object _pageNum getParamValue(paramsObject, pageNum, required);Object _pageSize getParamValue(paramsObject, pageSize, required);if (_pageNum null || _pageSize null) {if(hasOrderBy){Page page new Page();page.setOrderBy(orderBy.toString());page.setOrderByOnly(true);return page;}return null;}pageNum Integer.parseInt(String.valueOf(_pageNum));pageSize Integer.parseInt(String.valueOf(_pageSize));} catch (NumberFormatException e) {throw new PageException(分页参数不是合法的数字类型!);}Page page new Page(pageNum, pageSize);...... }5.PageHelper 实现分页的原理 在执行分页sql拼接时在sql后拼接limit进行分页,在调用方言的时候拼接分页参数 1路径com.github.pagehelper.PageInterceptor#intercept......//判断是否需要进行分页查询if (dialect.beforePage(ms, parameter, rowBounds)) {//生成分页的缓存 keyCacheKey pageKey cacheKey;//处理参数对象parameter dialect.processParameterObject(ms, parameter, boundSql, pageKey);//调用方言获取分页 sqlString pageSql dialect.getPageSql(ms, boundSql, parameter, rowBounds, pageKey);BoundSql pageBoundSql new BoundSql(configuration, pageSql, boundSql.getParameterMappings(), parameter);//设置动态参数for (String key : additionalParameters.keySet()) {pageBoundSql.setAdditionalParameter(key, additionalParameters.get(key));}//执行分页查询resultList executor.query(ms, parameter, RowBounds.DEFAULT, resultHandler, pageKey, pageBoundSql);} else {//不执行分页的情况下也不执行内存分页resultList executor.query(ms, parameter, RowBounds.DEFAULT, resultHandler, cacheKey, boundSql);}.......2)路径com.github.pagehelper.dialect.helper.MySqlDialect#getPageSqlOverridepublic String getPageSql(String sql, Page page, CacheKey pageKey) {StringBuilder sqlBuilder new StringBuilder(sql.length() 14);sqlBuilder.append(sql);if (page.getStartRow() 0) {sqlBuilder.append( LIMIT ? );} else {sqlBuilder.append( LIMIT ?, ? );}pageKey.update(page.getPageSize());return sqlBuilder.toString();}PageHelper自定义count(*)查询 因数据量太大使用分页插件PageHelper解析sql执行sql时会count一遍总计录数此时会将数据库卡死 使用分页插件执行会嵌套一层SELECT COUNT(*) FROM (主sql) tmp_count SELECT count(*) FROM (SELECTc.company_name,c.company_type,...FROM company cINNER JOIN t_seller ts ON ts.city_site_id c.city_site_id....WHERE c.city_site_id 1) tmp_count希望自定义个cout方法统计总记录数删减不必要的表关联、字段 应如何入手 最新版的PageHelper支持自定义count参考https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/Changelog.md#504—2017-08-01
http://www.pierceye.com/news/658261/

相关文章:

  • 为什么选php语言做网站重庆网站优化seo公司
  • 仿站侵权吗字体设计图片
  • 王建设医生个人网站智能网站搭建
  • 博物馆网站做的好的山东企业站点seo
  • 网站做视频怎么赚钱的平面设计公司哪家好
  • 合作建设网站协议php 个人网站 源码
  • 广州外贸营销型网站手机网站如何推广
  • 市总工会网站建设经验材料湖州建设局投标网站
  • ftp网站备份网上北京网站制作公司
  • ps海报模板素材免费怎样给网站做关键词优化
  • 做网站套餐wordpress 显示excel
  • 免费网站搭建临西做网站报价
  • 网站搭建详细步骤app应用网站html5模板下载
  • 苏州网站制作工作室宜宾网站开发公司
  • 哪些网站使用vue做的自己做服务器和网站
  • 怎样查看网站备案号自己录入数据做问卷的网站
  • 怎么提高网站的百度收录网页设计师考试报名
  • 北京网站建设公司联系方式常德网站建设专业品牌
  • 福州网站设计哪家做的好男科医院网站开发策划
  • 网站建设公司swot分析室内设计者联盟官网
  • 深圳手机商城网站设计游戏网站seo怎么做
  • 网站上传 文件夹结构国内响应式网站
  • 做logo图标的网站自助建站系统网站建设开发
  • 韩国站群服务器网络推广公司网站
  • 网站公司设计公司设计上海展会2021门票
  • 做微网站的公司哪家好刷百度关键词排名优化
  • php网站建设一流程胶南网站建设多少钱
  • 网站开发证书网站推广应该怎么做?
  • 网站规划与网页设计案例网站建设php招聘
  • 网站内容页优化阿里巴巴做网站么