Mybatis中${}与#{}的区别

                  ${}与#{}的区别

区别
1、#{ }是预编译处理,MyBatis在处理#{ }时,它会将sql中的#{ }替换为?,然后调用PreparedStatement的set方法来赋值,传入字符串后,会在值两边加上单引号,如上面的值 “6,66,666”就会变成“ ‘6,66,666’ ”;
2、 是 字 符 串 替 换 , M y B a t i s 在 处 理 { }是字符串替换, MyBatis在处理 MyBatis{ }时,它会将sql中的 替 换 为 变 量 的 值 , 传 入 的 数 据 不 会 加 两 边 加 上 单 引 号 。 注 意 : 使 用 { }替换为变量的值,传入的数据不会加两边加上单引号。 注意:使用 使{ }会导致sql注入,不利于系统的安全性!
SQL注入:就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。常见的有匿名登录(在登录框输入恶意的字符串)、借助异常获取数据库信息等
应用场合:
1、#{ }:主要用户获取DAO中的参数数据,在映射文件的SQL语句中出现#{}表达式,底层会创建预编译的SQL;
2、 : 主 要 用 于 获 取 配 置 文 件 数 据 , D A O 接 口 中 的 参 数 信 息 , 当 { }:主要用于获取配置文件数据,DAO接口中的参数信息,当 :,DAO,出现在映射文件的SQL语句中时创建的不是预编译的SQL,而是字符串的拼接,有可能会导致SQL注入问题.所以一般使用$接收dao参数时,这些参数一般是字段名,表名等,例如order by {column}。
注:
${}获取DAO参数数据时,参数必须使用@param注解进行修饰或者使用下标或者参数#{param1}形式;
#{}获取DAO参数数据时,假如参数个数多于一个可有选择的使用@param。

mybatis中foreach标签
foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。
foreach元素的属性主要有 item,index,collection,open,separator,close。

1  item表示集合中每一个元素进行迭代时的别名,
2  index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置,
3  open表示该语句以什么开始,                                                  例 : open="("  就是以左括号开始
4  separator 表示在每次进行迭代之间以什么符号作为分隔符,           例 :  separator=","  以逗号分隔
5  close 表示以什么结束。                                                          例 : close=")"    就是以右括号结尾

在使用foreach的时候最关键的也是最容易出错的就是collection属性,该属性是必须指定的,但是在不同情况 下,该属性的值是不一样的,主要有一下3种情况:

1  如果传入的是单参数且参数类型是一个List的时候,collection属性值为list
2  如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array
3  如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可

以封装成map,实际上如果你在传入参数的时候,在breast里面也是会把它封装成一个Map的,map的key就是参数名,所以这个时候collection属性值就是传入的List或array对象在自己封装的map里面的key。

DL中foreach标签

<% int[] array = new int[]{1, 2, 3, 4, 5, 6, 7, 8}; session.setAttribute("array", array); %>
	<c:forEach items="${array}" var="oneArray" begin="1" end="6" step="2" varStatus="status">
		值:<c:out value="${oneArray }"></c:out>   
		status.index:<c:out value="${status.index }"></c:out>   
		status.count:<c:out value="${status.count }"></c:out>   
		status.first:<c:out value="${status.first }"></c:out>   
		status.last:<c:out value="${status.last }"></c:out>   <br/>
	</c:forEach>
	
	<%--
	说明:1)items:是集合,用EL表达式;       
	2)var:变量名,存放items       
	3)varStatus: 显示循环状态的变量
	①index:从0开始;                     
	②count:元素位置,从1开始;                    
	 ③first:如果是第一个元素则显示true;                    
	  ④last:如果是最后一个元素则显示true;       
	4)begin:循环的初始值(整型);       
	5)end: 循环结束 ;       
	6)step:步长,循环间隔的数值;
	--%>
</body>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值