ibatis中#和$符号的区别

1.美图

在这里插入图片描述

ibatis中#和$符号的区别

在我们使用ibatis过程中,写sqlmap配置文件时经常会用到两个特殊的传值符号#和$符合,下面根据个人的分析总结,两者的区别。

  1.  数据类型匹配
    

#:会进行预编译,而且进行类型匹配;

$:不进行数据类型匹配。

如:

变量name的类型是string, 值是"张三"的时候

          $name$ = 张三

          #name# = '张三'

那么使用 就 会 报 错 , 若 要 使 用 就会报错,若要使用 使的话,需要修改为’ n a m e name name’;

我有一次要实现

(CURRENT_DATE-INTERVAL '7D') 使用这个 (CURRENT_DATE-INTERVAL '${dayNum}D')
  1.  实现方式
    

$ 的作用实际上是字符串拼接,

     select * from users where name= $name$

     等效于

     StringBuffer sb = newStringBuffer(256);

     sb.append("select * from userswhere name=").append(name);

     sb.toString();

#用于变量替换

    select * from users  where name = #name#

    等效于

    prepareStement=stmt.createPrepareStement("select * from users where name = ?")

   prepareStement.setString(1,'张三');
  1.  #和$使用场景
    

(1)变量的传递, 必须使用#,防止sql注入;# 是用prepareStement,提示效率。

#方式一般用于传入添加/修改的值或查询/删除的where条件

(2) 只 是 简 单 的 字 符 拼 接 而 已 , 对 于 非 变 量 部 分 , 那 只 能 使 用 只是简单的字符拼接而已,对于非变量部分, 那只能使用 使, 实际上, 在很多场合,$也是有很多实际意义的

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

         例如:

         select  * from  $tableName$  对于不同的表执行统一的查询

         update  $tableName$ set  name = #name#  每个实体一张表,改变不用实体的状态

         特别说明, $只是字符串拼接,所以要特别小心sql注入问题。

  (3)能同时使用#和$的时候,最好用#。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九师兄

你的鼓励是我做大写作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值