在xml中的字符串替换,常用的是#{},但是也有人用${}。
最简单的理解是#{}解析的字符串是带双引号的,而${}是不带双引号的。然而差异并不仅如此
一般来说,在你的 代码里面不变的字符串,不需要MyBatis去转义和修改的话,可以这样用:ORDER BY ${columnName},即你的这个columnName不管怎么着都是你的程序中写的固定的字符串(并不是真的是一个字符串,有可能不同的表是不同的字符串),而非用户输入。
而如果是 用户填写的字符串,希望还是用#{}的方式,这种方式,MyBatis会给他做转义——如果不用这个,可能会有 sql注入的风险。
——已经验证,确实${}没有''且不会转义,确实#{}有双引号而且会转义,但是转义仅限于'和\,像~!@#$%^&*()?:;"是都不会转义的
最简单的理解是#{}解析的字符串是带双引号的,而${}是不带双引号的。然而差异并不仅如此
一般来说,在你的 代码里面不变的字符串,不需要MyBatis去转义和修改的话,可以这样用:ORDER BY ${columnName},即你的这个columnName不管怎么着都是你的程序中写的固定的字符串(并不是真的是一个字符串,有可能不同的表是不同的字符串),而非用户输入。
而如果是 用户填写的字符串,希望还是用#{}的方式,这种方式,MyBatis会给他做转义——如果不用这个,可能会有 sql注入的风险。
——已经验证,确实${}没有''且不会转义,确实#{}有双引号而且会转义,但是转义仅限于'和\,像~!@#$%^&*()?:;"是都不会转义的