一、ORDER BY 排序失效
如果传递给 mapper 的参数值是以 #{test_参数}
的形式,那么就会报错
具体如下:
传递参数是 name
排序规则是升序 asc
package com.ruoyi.web.mapper;
public interface TestMapper {
List<TestEntity> getTestData( @Param("testcolumn") String testColumn, @Param("rule") String rule);
}
<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
后 使用 #{ }
获取参数值,运行后,会报错的,必须改成 ${ }
,井号改成 美元符号。
如下所示:
<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
package com.ruoyi.web.mapper;
public interface TestMapper {
List<TestEntity> getTestData( @Param("testcolumn") String testColumn, @Param("rule") String rule);
}
<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文章来源:https://www.toymoban.com/news/detail-667466.html
12. MyBatis 排序时使用 order by 动态参数文章来源地址https://www.toymoban.com/news/detail-667466.html
到了这里,关于Mybatis ORDER BY 排序失效 & ORDER BY 与 CASE WHEN THEN 排序问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!