zoukankan      html  css  js  c++  java
  • Mybatis中#和$的区别及应用

    (一)#和$的区别

    • #{}
    1. 可以进行预编译处理,会被当成?号,调用PreparedStatement的set方法来赋值;
    2. 可以防止sql注入;
    3. 传入的参数在sql中被看成一个字符串,会对传入的数据自动加引号,例如:
    select id,name,age from user where id =#{id};

    当参数id传入的值是“1”时,上述sql解析为:

    select id,name,age from user where id =1’;
    • ${}
    1. 不会进行预编译处理,是普通的占位符;
    2. 不能防止sql注入;
    3. 传入的参数在sql中直接替换成变量的值,例如:
    select id,name,age from user where id =${id};

    当参数id传入的值是“1”时,上述sql解析为:

    select id,name,age from user where id =1;

    (二)何时使用#{},何时使用${}?

    大多数情况下还是经常使用#,一般能用#{}的就不用${}
    既然#{}有预编译功能,能防止sql 注入,那为什么还要使用${}呢?请看下面sql语句能用#{}传递参数吗?

    SELECT * FROM #{tableName};

    假如tableName传入的值是user,那么解析后的sql是这样的:

    SELECT * FROM  'user';

    到mysql控制台试一下,会报1064错误,这种情况下就必须使用${},还是上面的语句使用$传参:

    SELECT * FROM ${tableName};

    解析后的sql可以正常执行:

    SELECT * FROM  user;

    凡是sql中不能添加引号的值动态传参时都必须使用${},像order by,group by等。

  • 相关阅读:
    Apache commons-net用法的一个示例
    Apache commons(Java常用工具包)简介
    MyBatis动态sql之${}和#{}区别
    Spring事务管理
    Spring:源码解读Spring IOC原理
    Spring常用注解总结
    maven常用命令
    Spring事务回滚和异常类
    CSS3--难以想象的滤镜效果
    Composer安装
  • 原文地址:https://www.cnblogs.com/xmm2017/p/13943873.html
Copyright © 2011-2022 走看看