Mybatis ORDER BY 排序失效 & ORDER BY 与 CASE WHEN THEN 排序问题

一、ORDER BY 排序失效

如果传递给 mapper 的参数值是以 #{test_参数} 的形式,那么就会报错

具体如下:

传递参数是 name 排序规则是升序 asc

java 复制代码
package com.ruoyi.web.mapper;
public interface TestMapper {
 List<TestEntity> getTestData( @Param("testcolumn") String testColumn, @Param("rule") String rule);
}
xml 复制代码
<mapper namespace="com.test.mapper.TestMapper">

<select id="getTestData" resultType="com.test.entity.TestEntity">
        SELECT * FROM test_table ORDER BY #{testcolumn} #{rule}
        
    </select>
</mapper>

ORDER BY 后 使用 #{ } 获取参数值,运行后,会报错的,必须改成 ${ },井号改成 美元符号。

如下所示:

xml 复制代码
<mapper namespace="com.test.mapper.TestMapper">

<select id="getTestData" resultType="com.test.entity.TestEntity">
        SELECT * FROM test_table ORDER BY ${testcolumn} ${rule}
        
    </select>
</mapper>

二、ORDER BY 与 CASE WHEN THEN 排序问题

数据库表 test_table 的真实字段名: test_id

测试参数值:

testcolumn 参数赋予内容是 testId

rule 排序规则是升序 asc

java 复制代码
package com.ruoyi.web.mapper;
public interface TestMapper {
 List<TestEntity> getTestData( @Param("testcolumn") String testColumn, @Param("rule") String rule);
}
xml 复制代码
<mapper namespace="com.test.mapper.TestMapper">

<select id="getTestData" resultType="com.test.entity.TestEntity">
        SELECT * FROM test_table ORDER BY 
		CASE 
		WHEN "${testcolumn}" = 'testId' 
		THEN test_id
        END   ${rule}
        
    </select>
</mapper>

注意:

${ } 一定要被双引号包含,否则不会进行一个字符串匹配,即和 'testId' 进行对比,会报错的,然后返回值的就不需要加双引号或单引号了, 直接就是数据库表 test_table 的字段名


参考链接

1. Mybatis实现 动态排序

2. MyBatis排序时使用order by 动态参数时需要注意,用$而不是#

3. Mybatis Order By动态参数详解

4. mybatis中orderBy(排序字段)和sort(排序方式)引起的bug

5. Mybatis动态字段排序防注入-简单粗暴上代码的方式

6. Mybatis自定义排序详解CASE WHEN

7. Mybatis CASE WHEN 的用法

8. Mybatis中case when 配合 trim的使用方法

9. MYBATIS中CASE WHEN的使用

10. Mybatis CASE WHEN 的用法

11. mysql 某列指定值靠前排序:order by 高级用法之case when

12. MyBatis 排序时使用 order by 动态参数

相关推荐
五岳4 小时前
分库分表数据源ShardingSphereDataSource的Connection元数据误用问题分析
java·mysql·爬坑
带刺的坐椅4 小时前
迈向 MCP 集群化:Solon AI (支持 Java8+)在解决 MCP 服务可扩展性上的探索与实践
java·ai·llm·solon·mcp
凯歌的博客4 小时前
springboot项目jar包启动, 配置文件外置
chrome·spring boot
鼠爷ねずみ4 小时前
SpringCloud前后端整体开发流程-以及技术总结文章实时更新中
java·数据库·后端·spring·spring cloud
代码or搬砖5 小时前
String字符串
android·java·开发语言
AM越.6 小时前
Java设计模式详解--装饰器设计模式(含uml图)
java·设计模式·uml
5980354156 小时前
【java工具类】小数、整数转中文大写
android·java·开发语言
JIngJaneIL7 小时前
基于java + vue个人博客系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot
TG:@yunlaoda360 云老大7 小时前
华为云国际站代理商备份策略设置过程中遇到问题如何解决?
服务器·数据库·华为云