MyBatis/Ibatis中#和$的区别】的更多相关文章

1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id". 2. $将传入的数据直接显示生成在sql中.如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为ord…
ibatis 中 $与#的区别 使用#: select * from table where id = #id# 如果字段为整型:#id#表示成id select * from table where id = #id# 如果字段为字符串:#id#表示的就是'id'类型 select * from table where id = #id# 使用$: select * from table where id = $id$ 如果字段id为整型,Sql语句就不会出错 select * from ta…
转自: http://www.blogjava.net/lsbwahaha/archive/2009/04/16/266026.html 一个项目中在写ibatis中的sql语句时,where user_id in (#user_id_list# ), 运行时总是不行,后来上网查了查,才知道这里不该用#,而应该用$,随即查了下#与$的区别. 总结如下: 1.#是把传入的数据当作字符串,如#user_id_list#传入的是1,2,则sql语句生成是这样,in ('1,2') ,当然不可以 2.$…
#{ }和${ }都可以从map中取到相对应的值, 但是 #{ }采取的是预编译的方式(PreparedStatement)来执行sql语句,有效防止了sql注入问题 select * from book where id=? and name = ? 而${ }采用的是拼接sql的方式 select * from book where id = 2 and name ='zhangsan' 这样会存在安全问题 大多数情况下我们使用#{ }的方式来取值, 但是在遇到原生JDBC不能使用占位符的情…
比如当变量name的类型是Stirng时, $name$ 打印出来的是 张三 #name# 打印出来的是 ‘张三’ $ 的作用实际上是字符串拼接 #用于变量替换 那什么时候用$,什么时候 用 # (1)对于变量部分, 应当使用#, 这样可以有效的防止sql注入,具体执行时,# 都是用到了prepareStement,这样对效率也有一定的提升 #方式一般用于传入插入/更新的值或查询/删除的where条件 (2) $只是简单的字符拼接而已,对于非变量部分, 那只能使用$, 实际上, 在很多场合,$也…
1.#和$两者含义不同#:会进行预编译,而且进行类型匹配:$:不进行数据类型匹配.示例:变量name的类型是string, 值是"张三"    $name$ = 张三    #name# ='张三'因此使用$就会报错,若要使用$的话,需要修改为’$name$’; 2.两者的实现方式不同2.1)$ 作用相等于是字符串拼接,select * from users where name= $name$等效于StringBuffer sb = newStringBuffer(256);sb.a…
MyBatis/Ibatis中#和$的区别 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号. 如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id". 2. $将传入的数据直接显示生成在sql中. 如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id…
1.数据类型匹配 #:会进行预编译,而且进行类型匹配(自动确定数据类型): $:不进行数据类型匹配. 2.实现方式: # 用于变量替换(先生成一个占位符,然后替换) select * from users  where name = #name# 等效于 prepareStement=stmt.createPrepareStement("select * from users where name = ?") prepareStement.setString (1,' 张三 '); $…
MyBatis Mapper.xml文件中 $和#的区别   网上有很多,总之,简略的写一下,作为备忘.例子中假设参数名为 paramName,类型为 VARCHAR . 1.优先使用#{paramName,jdbcType=VARCHAR} 写法,除了可以防止sql注入以外,它还能在参数里含有单引号的时候自动转义, 而${paramName}由于是类似于拼接sql的写法,不具备此功能. 2.注意,使用 #{paramName,jdbcType=VARCHAR} 写法的时候,模糊查询的写法为:'…
从 iBatis 到 MyBatis,你准备好了吗? 对于从事 Java EE 的开发人员来说,iBatis 是一个再熟悉不过的持久层框架了,在 Hibernate.JPA 这样的一站式对象 / 关系映射(O/R Mapping)解决方案盛行之前,iBaits 基本是持久层框架的不二选择.即使在持久层框架层出不穷的今天,iBatis 凭借着易学易用.轻巧灵活等特点,也仍然拥有一席之地.尤其对于擅长 SQL 的开发人员来说,iBatis 对 SQL 和存储过程的直接支持能够让他们在获得 iBati…