zoukankan      html  css  js  c++  java
  • $ 与 #

    $ 与 #这两个符号区别在当时上课的时候怕是人人都记得的,但却没用过,这次刚好有个典型的例子就吧他记录下来吧。

        <update id="updateBusiness">
            UPDATE ${param1} SET
            ${param2} = ''
            WHERE id = #{param3}
        </update>
    void updateBusiness(String tablename, String clumnName, String id);

    这个sql是修改指定表的指定列的某个字段,这也是我第一次做这种表名和列名做为变量传进来的情况。

    (1)这里用到的两个符号的区别主要是,这两个符号在解析的时候会不会自动加引号的问题,

      1)$这个符号是不会给加引号的,如果你使用这个符号还需要加引号的话,就只能手动加引号

      2)#这个符号,如果传的参数是字符串类型的话,他会给自动添加上引号

      3)所以上面的sql被解析后的样子是

    UPDATE demo SET title = '' WHERE id = ? 
     ==> Parameters: 06399898134089257498906178950622(String)

    即:UPDATE demo SET title = '' WHERE id = '06399898134089257498906178950622' 

    (2)在总结下这两个符号的区别

        #{}: 解析为一个 JDBC 预编译语句(prepared statement)的参数标记符,一个 #{ } 被解析为一个参数占位符 。

          ${}: 仅仅为一个纯碎的 string 替换,在动态 SQL 解析阶段将会进行变量替换。

    (3)我理解的他们两个的区别

      1)#{}是被解析成一个占位符,可以防止sql注入,${}只是字符串的拼接,有安全隐患

      2)#{}会给变量添加引号,${}不会添加

      

  • 相关阅读:
    【tomcat8】consider increasing the maximum size of the cache
    *更新*无需root,一条命令强制全屏模式
    处理SFTP服务器上已离职用户,设置为登录禁用状态
    一个Web 持续集成工作实践
    tensorflow实战笔记(18)----textCNN
    train loss相关问题
    Spark学习(4)----ScalaTest
    scala学习(4)---Array定长数组操作
    spark学习(3)---集合
    spark学习(2)---RDD
  • 原文地址:https://www.cnblogs.com/excellencesy/p/9892247.html
Copyright © 2011-2022 走看看