order by 字段,在用动态sql时会出现问题,排序无效,并且在日志里查询不到,不能发现这个错误。sql
一般,我们的动态sql通常都会用#代替$,由于#能够防止sql注入问题。数据库
可是在order by的字段里,若是继续用#,那么排序会无效。这个时候只能用$代替#。日志
1.#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #{user_id},若是传入的值是111,那么解析成sql时的值为order by "111", 若是传入的值是id,则解析成的sql为order by "id"。对象
2.$$将传入的数据直接显示生成在sql中。如:order by ${user_id},若是传入的值是111,那么解析成sql时的值为order by 111, 若是传入的值是id,则解析成的sql为order by id。排序
3.#方式可以很大程度防止sql注入。字符串
4.$方式没法防止Sql注入。sql注入
5.$方式通常用于传入数据库对象,例如传入表名。数据
6.通常能用#的就别用$。查询