ibatis中的$和#的区别
2024-09-26 04:36:00
- 介绍
在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$'。
- 区别
$ 的作用实际上是字符串拼接:
select * from $tableName$
等效于:
StringBuffer sb = new StringBuffer(256);
sb.append("select * from ").append(tableName);
sb.toString();
#用于变量替换
select * from table where id = #id#
等效于:
prepareStement = stmt.createPrepareStement("select * from table where id = ?") ;
prepareStement.setString(1,'abc');
- 用法总结
1、对于变量部分, 应当使用#,这样可以有效的防止sql注入,并且# 都是用到了prepareStement,这样对效率也有一定的提升。
2、$只是简单的字符拼接而已,对于非变量部分, 那只能使用$, 实际上, 在很多场合,$也是有很多实际意义的 。
例如 :select * from $tableName$ 对于不同的表执行统一的查询。 $只是字符串拼接, 所以要特别小心sql注入问题。
3、能同时使用#和$的时候最好用#。
最新文章
- 第二章 Rest框架 Nancy
- Asp.Net Core--基于角色的授权
- 函数图象(N=x+y*i)
- cf 730i
- Android 应用内存优化 之 onLowMemory &; onTrimMemory
- String.Format in javascript
- 如何在Win8系统上建立WIFI热点
- mysql外键实战
- 再探Java基础——throw与throws
- ♫【HTML5 敏捷实践】第1章 使用语义化的方式实现
- window.open()具体解释及浏览器兼容性问题
- C++实现最小堆及插入,调整顺序,删除堆顶元素的操作
- Effective C++(第三版)笔记 ---- 第一部分让自己习惯C++
- ASP代码审计学习笔记 -4.命令执行漏洞
- table 样式美化
- 数据库实例: STOREBOOK >; 表空间 >; 编辑 表空间: TEMP
- 20145311王亦徐《JAVA程序设计》课程总结
- 小技巧:tar命令打包目录时,排除文件和目录的命令
- 从大量的IP访问记录中找到访问次数最多的IP
- Python学习之高级特性