IBatis的SQLMap中#与$的区别

用$$ 有点宏替换的意思。
如下列映射:  
  <select   id="users"   resultMap="user">select   *   from   a   $name$</select>,则在传入参数可以queryForList("users",   "where   name='张三'");  

用##则是预编译处理,传入的是什么类型就是什么类型。(就是我们经常用的'?'占位符)
如下列映射:  
  <select   id="users"   resultMap="user">select   *   from   a   where   a.name=#name#</select>,你在传入参数时可以queryForList("users",   "张三");则生成的sql语句是select   *   from   a   where   a.name='张三'。

以下情况就必须使用$$:
  <typeAlias alias="rightsObj" type="com.*.model.Rights" />
  <select id="selectUserRights" parameterClass="rightsObj" resultMap="rightsMap" cacheModel="rightsCache">
        select r.* from RIGHTS r, USER_RIGHTS ur where ur.RIGHTS_ID=r.ID and ur.USER_ID=$userId$
  </select>

当userId不是rightsObj的属性,而是rightsObj派生类的属性时,如果还想像以下方式调用的话,就必须使用$$。
this.getSqlMapClientTemplate().queryForList("rights.selectUserRights", rightsVO);

需要注意的是$$不安全,容易被SQL注入攻击。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值