
MyBatis Order By 字符串替换
发布日期:2021-05-14 09:31:24
浏览次数:20
分类:博客文章
本文共 1373 字,大约阅读时间需要 4 分钟。
MyBatis Order By 字符串替换
默认情况下,使用 #{} 参数语法时,MyBatis 会创建 PreparedStatement 参数占位符,并通过占位符安全地设置参数(就像使用 ? 一样)。 这样做更安全,更迅速,通常也是首选做法,不过有时你就是想直接在 SQL 语句中直接插入一个不转义的字符串。 比如 ORDER BY 子句,这时候你可以:
ORDER BY ${columnName}
这样,MyBatis 就不会修改或转义该字符串了。
当 SQL 语句中的元数据(如表名或列名)是动态生成的时候,字符串替换将会非常有用。 举个例子,如果你想 select
一个表任意一列的数据时,不需要这样写:
@Select("select * from user where id = #{id}")User findById(@Param("id") long id);@Select("select * from user where name = #{name}")User findByName(@Param("name") String name);@Select("select * from user where email = #{email}")User findByEmail(@Param("email") String email);// 其它的 "findByXxx" 方法
而是可以只写这样一个方法:
@Select("select * from user where ${column} = #{value}")User findByColumn(@Param("column") String column, @Param("value") String value);
其中 ${column} 会被直接替换,而 #{value} 会使用 ?
预处理。 这样,就能完成同样的任务:
User userOfId1 = userMapper.findByColumn("id", 1L);User userOfNameKid = userMapper.findByColumn("name", "kid");User userOfEmail = userMapper.findByColumn("email", "noone@nowhere.com");
这种方式也同样适用于替换表名的情况。
综上所述,order by 进行排序可以这么写:
@Select(select * from user order by ${value} desc)ListfindAll(@Param("column") String column);xml写法:
注意:用这种方式接受用户的输入,并用作语句参数是不安全的,会导致潜在的 SQL 注入攻击。因此,要么不允许用户输入这些字段,要么自行转义并检验这些参数。
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年04月24日 04时19分55秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
F28335第九篇——通用IO
2019-03-11
STM32F429第十一篇之数据类型
2019-03-11
web项目开发记录
2019-03-11
matlab函数:sprintf详解
2019-03-11
matlab函数:fix 向0取整
2019-03-11
ORCAD创建元件库时,格点对不起怎么办
2019-03-11
Allegro中如何消除器件本身Pin间距报错
2019-03-11
AD中拖动器件,无法移动在一起如何解决
2019-03-11
linux--练习001-基础类型
2019-03-11
python内存地址和编译字节码
2019-03-11
Flask--简介
2019-03-11
Flask模板--过滤器与测试器
2019-03-11
16 python基础-恺撒密码
2019-03-11
06.1 python基础--结构控制
2019-03-11
Frame--Api框架
2019-03-11
Frame--WEB框架
2019-03-11
idea 在Debug 模式中运行语句中函数的方法
2019-03-11
springboot2.1.1开启druid数据库连接池并开启监控
2019-03-11