错误信息:
java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax to use near '-50' at line 1
错误原因: 分页计算导致OFFSET为负数(-50)
文件: SysChatMessageServiceImpl.java
问题: 分页计算可能产生负数
修复: 添加负数检查,确保offset >= 0
// 修复前
Integer offset = pageNum != null && pageSize != null ? (pageNum - 1) * pageSize : null;
// 修复后
Integer offset = null;
if (pageNum != null && pageSize != null && pageNum > 0) {
offset = (pageNum - 1) * pageSize;
if (offset < 0) offset = 0;
}
文件: ChatController.java
问题: Controller和Service都做了分页计算,导致双重计算
修复: 移除Controller中的重复计算
// 修复前
List<SysChatMessage> list = chatMessageService.selectConversationMessages(conversationId,
(pageNum - 1) * pageSize, pageSize);
// 修复后
List<SysChatMessage> list = chatMessageService.selectConversationMessages(conversationId, pageNum, pageSize);
文件: SysChatMessageMapper.xml
问题: 没有验证分页参数的有效性
修复: 添加参数验证条件
<!-- 修复前 -->
<if test="pageNum != null and pageSize != null">
LIMIT #{pageSize} OFFSET #{pageNum}
</if>
<!-- 修复后 -->
<if test="pageNum != null and pageSize != null and pageNum >= 0 and pageSize > 0">
LIMIT #{pageSize} OFFSET #{pageNum}
</if>
SysChatMessageServiceImpl.java - 分页计算逻辑ChatController.java - 移除重复计算SysChatMessageMapper.xml - SQL条件验证-- 手动测试查询
SELECT message_id, conversation_id, sender_id, sender_name, content, create_time
FROM sys_chat_message
WHERE conversation_id = 'conv_1_2'
AND status != '0'
ORDER BY create_time ASC
LIMIT 50 OFFSET 0;
状态: 🟢 已修复
更新时间: 2025-11-12 22:42