来自别人的:https://blog.csdn.net/findmyself_for_world/article/details/49976555

总结:凡是#的,都作为参数,用setobject方式预编译。而$方式的,则直接替换字符串。$很不安全,可能出现sql注入攻击风险。

在实际中,除了like语句外,也有人经常对in参数使用$$,如a.ORDER_STATUS in( $orderStatus$ )

对于一条简单的sql语句,例如:

Select * from user where id=#id#

Ibatis会把sql预编译为

select * from user where id=?

接着会把传入的值进行填充,类似于jdbc的preparestatment的形式。

之前的sql是简单的形式,加入需要用到模糊查询的like就比较麻烦,而且可能会出现sql注入的情况。

假如需要查询用户名中带"sa"的用户,可能会这样来写sql

select * from user where name like '%sa%'

但是在ibatis的xml中不能这样写,如果写成

select * from user where name like #%sa%#或者like %#sa#%是肯定不行的,会有报错。

有个很简单的办法,就是写成

select * from user where name like '%$name$%'

的样子,$符号会把参数原样嵌入sql语句中而不进行预编译,这就使得有可能出现sql注入攻击。其实ibatis从根本上简单的说,凡是#的,都作为参数,用setobject方式预编译。而$方式的,则直接替换字符串。 所以说,$很不安全,会把用户的输入直接当参数放入sql。

结论:最好不要用like来进行查询,1是因为效率低,2是因为在ibatis里使用是相当麻烦的,可读性很差,如果真的要用,不要使用$,而是使用#的like拼凑形式:

select * from user where name like '%'||#name#||'%';

Ibatis的#和$的区别的更多相关文章

  1. ibatis 中 $与#的区别

    ibatis 中 $与#的区别 使用#: select * from table where id = #id# 如果字段为整型:#id#表示成id select * from table where ...

  2. ibatis中 $ 于 # 的 区别?

    转自: http://www.blogjava.net/lsbwahaha/archive/2009/04/16/266026.html 一个项目中在写ibatis中的sql语句时,where use ...

  3. ibatis和mybatis的区别

    区别1:全局配置文件(sqlMapConfig.xml)的差异 主要是元素标签命名的差异,比如mybatis的根元素标签为<configuration>,ibatis的 根元素标签为< ...

  4. ibatis与mybatis的区别

    一.最主要的区别就是mybatis简化了编码的过程,不需要去写dao的实现类,直接写一个dao的借口,再写一个xml配置文件,整个mybatis就配置好了,也就是数据库就连接好了,然后再service ...

  5. ibatis .net $与#的区别

    $与#的区别 SELECT * FROM TABLE WHERE Id = #id# 其中如果字段id为字符串类型,那么#id#表示的就是'id',也就是说会自动加引号.如果id为整型,那么#id#就 ...

  6. MyBatis/Ibatis中#和$的区别

    1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111&qu ...

  7. ibatis中$和#的区别

    比如当变量name的类型是Stirng时, $name$ 打印出来的是 张三 #name# 打印出来的是 ‘张三’ $ 的作用实际上是字符串拼接 #用于变量替换 那什么时候用$,什么时候 用 # (1 ...

  8. 五、ibatis中#和$的区别和使用

    1.#和$两者含义不同#:会进行预编译,而且进行类型匹配:$:不进行数据类型匹配.示例:变量name的类型是string, 值是"张三"    $name$ = 张三    #na ...

  9. ibatis 中#和 $ 符号的区别

    1.数据类型匹配 #:会进行预编译,而且进行类型匹配(自动确定数据类型): $:不进行数据类型匹配. 2.实现方式: # 用于变量替换(先生成一个占位符,然后替换) select * from use ...

随机推荐

  1. ctags简明用法

    1.安装: sudo apt install ctags 2.生成tags文件: //进入目标目录 ctags -R . 3.在vim中设置tags的绝对目录,这样就可以在任何子目录使用了. :set ...

  2. python核心编程——python对象

    一.什么是python对象 在python中,构造的不论什么类型的值都是一个对象.比方一个整数类型的值,一个字符串.一个列表等,都能够看做是对象. 全部的对象分为三部分: (1)身份.每一个对象都有个 ...

  3. python学习之yummain模块

    定义:`yum`的命令行接口. yummain.main(args) Run the yum program from a command line interface. yummain.hotsho ...

  4. hive 中与mysql 中函数同名不同意的方法记录

    max 函数 在hive中max函数是一个聚合函数,所以,而且返回值是double ,而且后面必须跟group by ,这个和mysql差异很大 Built-in Aggregate Function ...

  5. QT4.8.5 源码编译记录

    今天想将以前的虚拟机的 QT4.8.5 集成到一个虚拟机里面,所以就重新编译了一次 QT4.8.5的源码 走了一点点小弯路,特此记录. 一.交叉编译器,不能直接从原来的虚拟机里面拷贝,必须使用官网的交 ...

  6. linux 安装开启SNMP协议,最下面是yum安装

    Linux SNMP 以下的示例采用SUSE10 Linux环境,但它同样适用于其它Linux发行版. 编译和安装 首先我们需要下载Net-SNMP的源代码,选择一个版本,比如5.7.1,地址如下: ...

  7. CSS(七):浮动

    一.float属性取值:left:左浮动right:右浮动none:不浮动 先看下面的一个例子: <!DOCTYPE html> <html lang="en"& ...

  8. 实现Easyui 可编辑表格

    一.前端框架使用的easyui框架 二.后端使用的是jfinal 三.效果图 四.html代码 <div id="table_tree" class="easyui ...

  9. $ -----JavaScript 中美元符号 $ 的作用

    JavaScript 中美元符号 $ 是什么 1.首先可以用来表示变量,比如变量 var s='asdsd'或var $s='asdasd'; 2.在正则表达式中,它可以匹配结尾:/sa$/.test ...

  10. 【cb2】安装终端

    虽然xterm轻量,但用起来不爽. sudo apt-get install terminator 其它安装 sudo apt-get install spyder sudo apt-get inst ...