在Ibatis中我们使用SqlMap进行Sql查询时需要引用参数,在参数引用中遇到的符号#和$之间的区分为,#可以进行与编译,进行类型匹配,而$不进行数据类型匹配,例如: select * from table where id = #id# ,其中如果字段id为字符型,那么#id#表示的就是'id'类型,如果id为整型,那么#id#就是id类型。 select * from table where id = $id$ ,如果字段id为整型,Sql语句就不会出错,但是如果字段id为字符型,那么Sql语句应该写成 select * from table where id = '$id$'(注意引号) 如果没有加上引号,会报错,提示 "xxxx"字段不存在. where user_id in (#user_id_list# ), 1.#是把传入的数据当作字符串,如#user_id_list#传入的是1,2,则sql语句生成是这样,in ('1,2') ,当然不可以 2.$传入的数据直接生成在sql里,如#user_id_list#传入的是1,2,则sql语句生成是这样,in(1,2) 这就对了. 3.#方式能够很大程度防止sql注入. 4.$方式无法方式sql注入. 5.$方式一般用于传入数据库对象.例如传入表名. 6.一般能用#的就别用$.直观的说 #str# 出来的效果是 'str' $str$ 出来的效果是 str 另外 ##只能用在特定的几个地方 $$可以用在任何地方 比如 order by $str$ 你甚至可以直接写 $str$ 把 order by 这个字串放在str里传进来
ibatis中的#XX#和$XX$的区别。
最新推荐文章于 2022-09-11 18:22:14 发布