zoukankan      html  css  js  c++  java
  • 9、mybatis学习——sqlmapper配置中#{}和${}的区别

    一、#{}是预编译处理,${}是字符串替换。

      Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;
      Mybatis在处理${}时,就是把${}替换成变量的值。

    二、使用#{}可以有效的防止SQL注入,提高系统安全性。

      MyBatis排序时使用order by 动态参数时需要注意,用$而不是#

      1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。
      2. $将传入的数据直接显示生成在sql中。
      3. #方式能够很大程度防止sql注入。
      4.$方式无法防止Sql注入。
      5.$方式一般用于传入数据库对象,例如传入表名。
      6. #{}方式一般用于传入字段值。
      7.一般能用#的就别用$。

     三、传值差别

      #{id}其中的id表示接收输入的参数,参数名就是id,如果输入参数是简单类型,#{}中的参数名可以任意,参数类型为对象,则参数名需写对象的属性名

      ${}表示拼接sql串,将接收参数的内容不加任何修饰拼接到sql中,一般用于模糊查询${value}:接收输入参数的内容,如果传入类型是简单类型,${}中只能用 value,参数类型为对象,则参数名需写对象的属性名

      例如:select * from user where userName like '%${value}%'

  • 相关阅读:
    php 制表符(\t) 与单引号的疑惑。
    preg_replace 正则替换的疑惑
    命令行下使用curl,采集数据遇到的问题。
    vmware player 里的window xp 安装wamp遇到的问题
    2014年11月05日
    2014年11月05日
    让开发人员搞业务是不对的
    2014年11月05日
    web应用.表格很重要
    业务复杂
  • 原文地址:https://www.cnblogs.com/lyh233/p/12342818.html
Copyright © 2011-2022 走看看