.NET_iBatis.NET挖坑_使用$和#替换可空字段变量
2017-03-08 14:59
260 查看
背景
ibatis.net版本:1.6.2.0问题描述
如果有个表Test,有个字段A(类型为int,可为空,默认为0),插入数据有两种写法:<insert id="AddTest" > INSERT INTO Test(A) VALUES(#A#); </insert>
<insert id="AddTest" > INSERT INTO Test(A) VALUES($A$); </insert>
这两者在编译后的SQL语句是不一样的。
对于
$A$这种写法,如果A是null,编译后会将
$A$直接删除,结果是
INSERT INTO Test(A) VALUES(),很明显该语句运行会出错。
对于
#A#这种写法,会根据A的不同情况选择不同的拼接方式,比如当前A的值为null,编译后的语句是
INSERT INTO Test(A) VALUES(@param0)并且
@param0的值是
null
总结
通常在使用ibatis时,对于传入的参数拼接到SQL语句中有两种包裹方式:#和$。这两者有比较大的差异:$的作用是字符串拼接
对于SQL语句的变量部分禁止使用,否则会引入注入漏洞
可以用于非变量部分,比如动态变化的表名
如果$内的变量为null,ibatis会将该变量直接从SQL语句中删除
#的作用是变量替换
常用于SQL的变量赋值
不能用于表名的替换
参考资料:
ibatis中 $ 于 # 的 区别?
ibatis中 $与#的区别
相关文章推荐
- IBatis.Net使用MemCached替换内置缓存策略
- ibatis.net:尽可能的使用匿名类型替换 Hashtable
- .Net下使用Xml与ADO.net (摘至ADO.net技术内幕)
- 翻譯Borland® Delphi® 2005使用 VCL for .NET移植到 .NET(2)
- 在ASP.NET中使用.NET组件
- biztalk中使用.net class类型的消息(三) -- net class类型消息转换为xml消息的示例
- .net中使用正则表达式替换字符串
- 使用 C# 和 C++.NET 开发的 .NET 应用程序实例列表
- NET正则表达式使用高级技巧之替换类
- 通过Reflector和.net的反射机制来探索和使用.net framework未文档化的API
- 同时使用 C# and VB.NET 在 .net 2.0 中
- 在.net中使用MagicAjax.NET
- .NET框架类在ASP.NET中的使用(1)——Q&A
- 使用 .NET 对事件进行编程以及VS.NET 2003 有那些新特性
- IBatis.Net怎么使用VS 2005来做单元测试
- Office with .Net (二) ――― 使用.Net访问Office编程接口
- 在ASP.NET中使用.NET组件
- 使用.net开发手机管理软件 (十) 短信部分——VB.NET解码PDU
- Office with .Net (二) ――― 使用.Net访问Office编程接口
- 技巧和诀窍:使用ASP.NET 2.0 输出缓存替换的功能实现“甜圈缓存(Donut Caching)”