天天看点

MyBatis中${ }与#{ }有什么区别?

1、#{  }是预编译处理,MyBatis在处理#{  }时,它会将sql中的#{  }替换为?,然后调用PreparedStatement的set方法来赋值;

2、   是 字 符 串 替 换 ,   M y B a t i s 在 处 理 {  }是字符串替换, MyBatis在处理  是字符串替换, MyBatis在处理{  }时,它会将sql中的${  }替换为变量的值。

注意:使用${  }会导致sql注入,不利于系统的安全性!

SQL注入:就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。常见的有匿名登录(在登录框输入恶意的字符串)、借助异常获取数据库信息等

应用场合:

1、#{  }:主要用户获取DAO中的参数数据,在映射文件的SQL语句中出现#{}表达式,底层会创建预编译的SQL;

2、   : 主 要 用 于 获 取 配 置 文 件 数 据 , D A O 接 口 中 的 参 数 信 息 , 当 {  }:主要用于获取配置文件数据,DAO接口中的参数信息,当  :主要用于获取配置文件数据,DAO接口中的参数信息,当出现在映射文件的SQL语句中时创建的不是预编译的SQL,而是字符串的拼接,有可能会导致SQL注入问题.所以一般使用$接收dao参数时,这些参数一般是字段名,表名等,例如order by {column}。

注:

${}获取DAO参数数据时,参数必须使用@param注解进行修饰或者使用下标或者参数#{param1}形式;

#{}获取DAO参数数据时,假如参数个数多于一个可有选择的使用@param。

作者:为生活而Coding

来源:CSDN

原文:https://blog.csdn.net/weixin_42759709/article/details/83015890

版权声明:本文为博主原创文章,转载请附上博文链接!