用$$ 有点宏替换的意思。
如下列映射:
<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注入攻击。
IBatis的SQLMap中#与$的区别
最新推荐文章于 2018-05-23 15:06:46 发布