美文网首页
MyBatis中#和$的区别

MyBatis中#和$的区别

作者: Java_Explorer | 来源:发表于2019-05-22 21:04 被阅读0次

    区别

    1. #{ }是预编译处理,MyBatis在处理#{ }时,会将sql中的#{ }替换为?,然后调用PreparedStatement的set方法来赋值,传入字符串后,会在值两边加上单引号,如传入1,2,3就会变成'1,2,3'
    2. ${ }是字符串替换,MyBatis在处理${ }时,会将sql中的${ }替换为变量的值,传入的数据不会在两边加上单引号。

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

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

    应用场景

    1. 一般能用#的就别用$
    2. $方式一般用于传入数据库对象,例如传入字段名、表名等,例如order by ${column}

    注意:
    ${}获取DAO参数数据时,参数必须使用@param注解进行修饰或者使用下标或者参数#{param1}形式。
    #{}获取DAO参数数据时,假如参数个数多于一个可有选择的使用@param。

    相关文章

      网友评论

          本文标题:MyBatis中#和$的区别

          本文链接:https://www.haomeiwen.com/subject/gajpzqtx.html