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

彻底解决ruoyi分页后总数错误的问题

问题描述

最近时不时的发现用户列表出来的数据只有24条,但是总记录数却有58条,很奇怪。各种百度查询,都是什么修改查询分页改代码,尝试后发现还是没有效果,经过各种验证发现就是SQL语句错误。

如果非要说是SQL语句没有问题,查询出来的数据是正确的,如果基于这个事实去讲那确实没有错,错的是你建表的字段类型不一致,这是本质错误。举个例子,你的主表user中有一个dept_id的字段,而这个字段是varchar(200),但是你的dept表的id确实bigint的类型,这个时候就会出现你用具体的字段去查询是正确的结果数据,但是用count(*) 去查询就是错误的记录数。

解决方法前提

先把PageUtils.java替换成和我一样的。避免出现其它的幺蛾子。

package com.ruoyi.common.utils;import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.ruoyi.common.constant.HttpStatus;
import com.ruoyi.common.core.page.PageDomain;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.page.TableSupport;
import com.ruoyi.common.utils.sql.SqlUtil;import java.util.List;/*** 分页工具类** @author ruoyi*/
public class PageUtils extends PageHelper {private static Page page;/*** 设置请求分页数据*/public static void startPage() {PageDomain pageDomain = TableSupport.buildPageRequest();Integer pageNum = pageDomain.getPageNum();Integer pageSize = pageDomain.getPageSize();if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)) {String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy());Boolean reasonable = pageDomain.getReasonable();PageHelper.startPage(pageNum, pageSize, orderBy).setReasonable(reasonable);}}public static TableDataInfo getDataTable(List<?> list) {TableDataInfo rspData = new TableDataInfo();rspData.setCode(HttpStatus.SUCCESS);rspData.setMsg("查询成功");rspData.setRows(list);rspData.setTotal(page.getTotal());return rspData;}
}

解决方法1

把两张表的字段类型对应成一样的。如果有一个是bigint,有一个是varchar要么都统一修改为varchar要么统一修改为bigint。

解决访问2

字段不用修改,修改SQL语句,把bigint的字段转换一下,如下

// 错误的写法
select count(0)from user uleft join dept d on d.id=u.dept_idwhere 1=1and u.is_deleted = 0// 正确的写法
select count(0)from user uleft join dept d on concat(d.id,'')=u.dept_idwhere 1=1and u.is_deleted = 0// 正确的写法
select count(0)from user uleft join dept d on cast( d.id AS CHAR )=u.dept_idwhere 1=1and u.is_deleted = 0

警告

切记,不要让没有经验的人去设计表结构,我这次就是为了100%兼容V1版本的设计,用ruoyi框架去做的倾斜匹配,导致各种问题。

------------------------------华丽的分割线--------

无用解决方案

以下都是没有用的解决方案,大家不用看了,修改你的SQL语句去吧。下面的都是凑字数的。

分页插件如何手写count查询支持

增加countSuffix count 查询后缀配置参数,该参数是针对PageInterceptor配置的,默认值为_COUNT

分页插件会优先通过当前查询的msId + countSuffix查找手写的分页查询。

如果存在就使用手写的count查询,如果不存在,仍然使用之前的方式自动创建count查询。

例如,如果存在下面两个查询:

<select id="selectLeftjoin" resultType="com.github.pagehelper.model.User">select a.id,b.name,a.py from user aleft join user b on a.id = b.idorder by a.id
</select><select id="selectLeftjoin_COUNT" resultType="Long">select count(distinct a.id) from user aleft join user b on a.id = b.id
</select>

上面的countSuffix使用的默认值_COUNT,分页插件会自动获取到selectLeftjoin_COUNT查询,这个查询需要自己保证结果数正确。

返回值的类型必须是resultType="Long",入参使用的和selectLeftjoin查询相同的参数,所以在SQL中要按照selectLeftjoin的入参来使用。

因为selectLeftjoin_COUNT方法是自动调用的,所以不需要在接口提供相应的方法,如果需要单独调用,也可以提供。

如何处理Long类型精度丢失问题

当字段实体类为Long类型且值超过前端js显示的长度范围时会导致前端回显错误,解决方案如下

1、使用JsonSerialize注解序列化的时候把Long自动转为String(针对单个属性)

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;@JsonSerialize(using = ToStringSerializer.class)
private Long xxx;

2、添加JacksonConfig配置全局序列化(针对所有属性)

package com.ruoyi.framework.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;/*** Jackson配置* * @author ruoyi**/
@Configuration
public class JacksonConfig
{@Beanpublic MappingJackson2HttpMessageConverter jackson2HttpMessageConverter(){final Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();builder.serializationInclusion(JsonInclude.Include.NON_NULL);final ObjectMapper objectMapper = builder.build();SimpleModule simpleModule = new SimpleModule();// Long 转为 String 防止 js 丢失精度simpleModule.addSerializer(Long.class, ToStringSerializer.instance);objectMapper.registerModule(simpleModule);// 忽略 transient 关键词属性objectMapper.configure(MapperFeature.PROPAGATE_TRANSIENT_MARKER, true);// 时区设置objectMapper.setTimeZone(TimeZone.getTimeZone("GMT+8"));objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));return new MappingJackson2HttpMessageConverter(objectMapper);}
}

相关文章:

彻底解决ruoyi分页后总数错误的问题

问题描述 最近时不时的发现用户列表出来的数据只有24条&#xff0c;但是总记录数却有58条&#xff0c;很奇怪。各种百度查询&#xff0c;都是什么修改查询分页改代码&#xff0c;尝试后发现还是没有效果&#xff0c;经过各种验证发现就是SQL语句错误。 如果非要说是SQL语句没…...

SpringMVC学习笔记——1

SpringMVC学习笔记——1 一、SpringMVC简介1.1、SpringMVC概述1.2、SpringMVC快速入门1.3、Controller中访问容器中的Bean1.4、SpringMVC关键组件的浅析 二、SpringMVC的请求处理2.1、请求映射路径配置2.2、请求数据的接收2.2.1、键值对方式接收数据2.2.2、封装JavaBean数据2.2…...

20230908_python练习_selenium模块爬取网页小说练习

霍比特人小说爬取&#xff0c;使用 selenium 模块调用谷歌浏览器&#xff0c;无界面模式爬取小说网站信息&#xff0c;将数据按照每次2000字符在mysql中保存。 # https://www.shukuai9.com/b/324694/ # 导入需要的库 from selenium import webdriver # 导入Keys模块&#xff…...

Python:安装Flask web框架hello world示例

安装easy_install pip install distribute 安装pip easy_install pip 安装 virtualenv pip install virtualenv 激活Flask pip install Flask 创建web页面demo.py from flask import Flask app Flask(__name__)app.route(/) def hello_world():return Hello World! 2023if _…...

深度解析NLP文本摘要技术:定义、应用与PyTorch实战

目录 1. 概述1.1 什么是文本摘要&#xff1f;1.2 为什么需要文本摘要&#xff1f; 2. 发展历程2.1 早期技术2.2 统计方法的崛起2.3 深度学习的应用2.4 文本摘要的演变趋势 3. 主要任务3.1 单文档摘要3.2 多文档摘要3.3 信息性摘要 vs. 背景摘要3.4 实时摘要 4. 主要类型4.1 抽取…...

zabbix监控多实例redis

Zabbix监控多实例Redis 软件名称软件版本Zabbix Server6.0.17Zabbix Agent5.4.1Redis6.2.10 Zabbix客户端配置 编辑自动发现脚本 vim /usr/local/zabbix/scripts/redis_discovery.sh #!/bin/bash #Fucation:redis low-level discovery #Script_name redis_discovery.sh red…...

win11将visual studio 2022的调试控制台改为windows terminal

一、前言 默认的调试控制台太丑了&#xff0c;字体也没有好看的&#xff0c;还是更喜欢windows terminal 二、修改 2.1 修改之前 2.2 修改步骤 打开windows terminal点这个向下的标志 选择settings按照下图1, 2, 3步骤依次操作即可 2.3 修改之后 总结 漂亮很多了...

社区问答精选——长安链开发知多少?(8月)

本文是根据社群内开发者较为关注的问题进行整理&#xff0c;希望可以帮助开发者解决所遇到的问题。有更多问答在社区issue中描述更为细致&#xff0c;开发者提问前可以先按照关键词进行搜索。欢迎各位开发者按照问答template提交issue&#xff0c;也欢迎有意愿的开发者参与到社…...

神经网络-Unet网络

文章目录 前言1.seq2seq 编码后解码2. 网络结构3.特征融合4. 前言 Unet用来做小目标语义分割。 优点&#xff1a;网络结构非常简单。 大纲目录 2016年特别火&#xff0c;在细胞领域做分割特别好。 1.seq2seq 编码后解码 2. 网络结构 几个卷积层&#xff0c;越来越扁&#x…...

Java | 多线程综合练习

不爱生姜不吃醋⭐️ 如果本文有什么错误的话欢迎在评论区中指正 与其明天开始&#xff0c;不如现在行动&#xff01; 文章目录 &#x1f334;前言&#x1f334;一、卖电影票1.题目2.分析3.代码 &#x1f334;二、送礼物1. 题目2. 分析3.代码 &#x1f334;三.打印奇数1. 题目2.…...

Kotlin变量与控制条件的基本用法

一、变量与控制条件 1、var与val var&#xff1a;可修改变量 val&#xff1a;只读变量&#xff0c;只读变量并非绝对只读。 编译时常量只能在函数之外定义&#xff0c;因为函数内常量是在运行时赋值&#xff0c;编译时常量要在变量赋值前存在。并且值是无法修改的。 const…...

第18章_瑞萨MCU零基础入门系列教程之GPT

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id728461040949 配套资料获取&#xff1a;https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总&#xff1a; ht…...

openssl websockets

1. HTTPS通信的C实现 - 知乎 GitHub - Bwar/Nebula: Nebula is a powerful framwork for building highly concurrent, distributed, and resilient message-driven applications for C....

Vue 组件的单元测试

1、基本的示例 单元测试是软件开发非常基础的一部分。单元测试会封闭执行最小化单元的代码&#xff0c;使得添加新功能和追踪问题更容易。Vue 的单文件组件使得为组件撰写隔离的单元测试这件事更加直接。它会让你更有信心地开发新特性而不破坏现有的实现&#xff0c;并帮助其他…...

海底两万里的思维导图,轻松了解整体的内容

《海底两万里》是一部经典的科幻小说。小说以其丰富的想象力和对海底世界的描绘而闻名于世。今天我们就用思维导图的分支介绍这个作品到底讲了什么。&#xff08;思维导图示例&#xff1a;迅捷画板&#xff09; 《海底两万里》是“凡尔纳三部曲”中的第二部&#xff08;其它两部…...

ZABBIX 6.4官方安装文档

一、官网地址 Zabbix&#xff1a;企业级开源监控解决方案 二、下载 1.选择您Zabbix服务器的平台 2. Install and configure Zabbix for your platform a. Install Zabbix repository # rpm -Uvh https://repo.zabbix.com/zabbix/6.4/rhel/8/x86_64/zabbix-release-6.4-1.el8…...

本地MQTT服务器搭建(EMQX)

一、下载EMQX 下载地址&#xff1a;EMQ (emqx.com) 打开官网后&#xff0c;选择右边的免费试用按钮 然后单击EMQX Enterprise标签&#xff0c;然后选择下面的EMQX开源版&#xff0c;选择开源版的系统平台为Windows&#xff0c;单击免费下载。 在新页面下单击立即下载 二、安装…...

Docker启动pandora并指定ACCESS TOKEN

把chatGPT_ACCESS_TOKEN改成你的ACCESS_TOKEN 《chatGPT ACCESS TOKEN获取地址&#xff08;需要魔法&#xff09;》 docker run -d -m 512m -p 88:88 --privilegedtrue -e PANDORA_SERVER0.0.0.0:88 -e PANDORA_ACCESS_TOKENchatGPT_ACCESS_TOKEN --name pandora pengzhile/pa…...

Python + Jmeter 实现自动化性能压测

Step01: Python脚本开发 文件路径&#xff1a;D://wl//testproject//Fone-grpc//project1//test_client.py Python 脚本作用&#xff1a; 通过 grpc 调用底层 c 的接口&#xff0c;做数据库的数据插入与查询操作&#xff0c;然后将返回的结果进行拼接与输出。 2.代码里面将…...

【Linux进行时】进程状态

进程状态&#xff1a; ❓假设我们在上课&#xff0c;在B站上上课&#xff0c;请问我们的B站是不是一直运行呢&#xff1f;&#x1f4a1;不是的&#xff01; ❓假设我们同时打开了B站和PDF阅读器时&#xff0c;是怎么运行的呢&#xff1f; &#x1f4a1;每一个进程在CPU跑一会&a…...

从理论到实践:LQR在二自由度云台控制系统中的参数整定与仿真验证

1. LQR控制器的工程实践意义 二自由度云台在工业自动化、智能监控等领域应用广泛&#xff0c;但传统PID控制往往难以兼顾快速响应和稳定性的双重需求。LQR&#xff08;线性二次型调节器&#xff09;作为现代控制理论中的经典方法&#xff0c;通过优化目标函数实现对系统的精确控…...

CocoaPods终极版本管理指南:掌握语义化版本控制与依赖锁定策略

CocoaPods终极版本管理指南&#xff1a;掌握语义化版本控制与依赖锁定策略 【免费下载链接】CocoaPods The Cocoa Dependency Manager. 项目地址: https://gitcode.com/gh_mirrors/co/CocoaPods CocoaPods是iOS和macOS开发中最受欢迎的依赖管理器&#xff0c;它通过智能…...

本地部署AI代码解释器:基于大模型的对话式编程实践指南

1. 项目概述&#xff1a;当本地代码解释器遇上大模型最近在折腾一个挺有意思的项目&#xff0c;叫local-code-interpreter。这名字听起来有点学术&#xff0c;但说白了&#xff0c;它就是一个能让你在自己电脑上&#xff0c;通过自然语言对话来编写、执行和调试代码的“智能助手…...

基于Electron的本地字幕翻译工具开发全解析

1. 项目概述&#xff1a;一个本地化的字幕翻译利器最近在折腾一些海外纪录片和课程视频&#xff0c;发现一个挺普遍的需求&#xff1a;手头有外文字幕文件&#xff08;比如SRT、ASS&#xff09;&#xff0c;想把它翻译成中文&#xff0c;但又不希望把视频或字幕上传到任何在线服…...

9.5 点云采样——拓扑采样

图9-5-1 PointNet++中的邻域特征聚合的拓扑采样过程 拓扑/图结构采样的核心思想是“基于点云的局部拓扑关系(如K近邻、聚类)”进行采样,通过构建点云的拓扑图或聚类结构,选取每个局部区域的代表点,实现“局部保特征、全局均匀”的采样效果。 (1)出处 &n...

小熊猫Dev-C++:零配置C/C++开发环境的终极指南

小熊猫Dev-C&#xff1a;零配置C/C开发环境的终极指南 【免费下载链接】Dev-CPP A greatly improved Dev-Cpp 项目地址: https://gitcode.com/gh_mirrors/dev/Dev-CPP 小熊猫Dev-C&#xff08;Red Panda Dev-C&#xff09;是一款专为C/C开发者设计的现代化集成开发环境&…...

W4A4量化技术:OSC框架如何实现高效LLM部署

1. OSC框架&#xff1a;硬件高效的W4A4量化革命在大型语言模型(LLM)部署领域&#xff0c;4-bit量化(W4A4)正成为突破算力瓶颈的关键技术。传统8-bit量化虽已成熟&#xff0c;但当我们将精度压缩至4-bit时&#xff0c;激活张量中的异常值(Outliers)会像"黑洞"般吞噬有…...

量子信号处理技术及其在离子阱系统中的应用

1. 量子信号处理技术概述量子信号处理&#xff08;Quantum Signal Processing, QSP&#xff09;是近年来量子计算领域涌现的一项基础性技术&#xff0c;它通过精心设计的量子比特旋转序列&#xff0c;实现对量子数据的系统性多项式变换。这项技术的核心价值在于&#xff0c;它为…...

Godot开发者必备:awesome-godot资源库高效使用指南

1. 项目概述&#xff1a;一个开源游戏引擎的“宝藏库” 如果你正在使用或考虑使用 Godot 引擎进行游戏开发&#xff0c;那么你很可能已经听说过 awesome-godot 这个项目。它不是一个可以直接运行的软件&#xff0c;也不是一个插件&#xff0c;而是一个由社区共同维护的、结构…...

GitHub 74.2k Star的Redis,开发者必备的内存数据库

文章目录GitHub 74.2k Star的Redis&#xff0c;开发者必备的内存数据库核心能力覆盖多数开发场景实际使用建议GitHub 74.2k Star的Redis&#xff0c;开发者必备的内存数据库 Redis是GitHub上的热门开源项目&#xff0c;Star数达到74223&#xff0c;是很多开发者日常工作中常用…...