今天碰到一很傻缺的问题,以前没怎么注意,今天用到很多动态排序,对,ORDER – BY,说的就是你。
突然我就傻缺了,怎么调试出来的数据都不对。查看mysql的执行记录。
1 | WHERE is_deleted = 0 ORDER - BY 'viewCount' 'desc' LIMIT 0,10 |
why? 喂,哪里来的引号?
赶快度娘,原来我的参数用的是#{xxx},默认情况下,使用#{}格式的语法会导致MyBatis创建预处理语句属性并以它为背景设置安全的值(比如?)。这样做很安全,很迅速也是首选做法,有时你只是想直接在SQL语句中插入一个不改变的字符串。比如,像ORDER – BY,你可以这样来使用:
1 | ORDER - BY ${columnName} |
这里MyBatis不会修改或转义字符串。
重要:接受从用户输出的内容并提供给语句中不变的字符串,这样做是不安全的。这会导致潜在的SQL注入攻击,因此你不应该允许用户输入这些字段,或者通常自行转义并检查。
转载请注明:迷路的老鼠 » mybaits参数排序