zoukankan      html  css  js  c++  java
  • mybatis $和#

    1. $

      将传入的数据直接显示生成在sql中,不会修改或转义字符串。如:order by $id$,如果传入的值是111,那么解析成sql时的值为order by 111,  如果传入的值是id,则解析成的sql为order by id.所以$方式一定程度上无法防止Sql注入。  

      $方式一般可用于传入数据库对象,例如传入表名。

      mybatis排序时使用order by,其后面的动态参数也应使用$,但一般不建议这样使用,会存在潜在的sql注入风险。

      ${}等效$$,不会修改或转义字符串,类似以下执行:

    Statement st = conn.createStatement();
           
    ResultSet rs = st.executeQuery(sql);

     

    2. #

      将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id".相对使用$方式能够很大程度防止sql注入。

      #{}等效##,这样使用的sql能够预编译,能在内存中保存sql语法,不用重新组装sql语法,类似以下执行:

    PreparedStatement ps = conn.prepareStatement(sql);
    ps.setInt(1,id);

    一般情况下,建议能用#的就别用$。

  • 相关阅读:
    Pyramid of Glasses(递推)
    Vasya and String(尺取法)
    10317 Fans of Footbal Teams(并查集)
    8633 回文划分(dp)
    bzoj1036
    POJ 3071 Football(概率DP)
    POJ A Plug for UNIX (最大流 建图)
    hdu 3060 Area2 (计算几何模板)
    POJ 1273 Drainage Ditches (网络流Dinic模板)
    POJ 2443 Set Operation (按位压缩)
  • 原文地址:https://www.cnblogs.com/kingsonfu/p/10399987.html
Copyright © 2011-2022 走看看