lee 1091 0 2017-03-22 22:05:14

Java编程之MyBatis框架sql中变量引用方式#{}与${}的区别

#{}和 ${}传参的区别如下:
1.使用#传入参数是,sql语句解析变量时候将添加""包裹变量,当成字符串来解析,$则不会用""包裹;
2.#能使用PreparedStatement语句提高一定的效率;
3.#{}传参能防止sql注入,如果你传入的参数为 单引号',那么如果使用${},这种方式 那么是会报错的;
4.如果要做动态的排序,动态查询某个字段比如 order by column,这个时候务必要用${},select * from table order by 'name' ,这样是没用
5.从安全角度出发,能用#就不要用$;

总结:
简单来说#{} 解析的是占位符?可以防止SQL注入, 比如打印出来的语句 
select * from table where id=?

然而${} 则是不能防止SQL注入打印出来的语句 
select * from table where id=2 

实实在