mybatis中mapper.xml中${}和#{}的区别

MyBatis排序与分页优化
本文分享了在MyBatis中实现排序和分页功能的优化经验,通过对比#{}

这两天遇到一个问题,如图点击表格上面会出现排序和分页
这里写图片描述
原来的想法

 <select id="getUserList" resultMap="BaseResultMap" parameterType="map">
  	select 
  	    <include refid="Base_Column_List" />
  	from user 
  	   <if test='fleld != null and fleld != ""'>
  	        ORDER BY #{fleld}
          </if> 
          <if test='order != null and order != ""'>
              #{order}
          </if>
  	limit #{start},#{limit}
  </select>

其中 fleld 排序依据;order 升降序;start 查询起始点;limit 当前页面显示的数量;这些值都是从前端传过来的,可是怎么都不能实现,在数据库的命令界面 “select * from user order by id desc limit 0,3;”是可以查询的,这就说明语句没问题,那就是传入的值有问题,可是我将四个传入的值分别打印出来,发现没问题。当时我就慌了, 这算是怎么了????

然后就去查关于mybatis相关xml查询语句时需注意的事项发现了${}

就又去查了下${}以及和#{}的区别:

1.***#{}将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #{id},如果传入的值是111,那么解析成sql时的值为order by “111”, 如果传入的值是id,则解析成的sql为order by “id”***。
2. *${}将传入的数据直接显示生成在 sql 中;如:order by ${id},如果传入的值是111,那么解析成sql时的值为order by 111, 如果传入的值是id,则解析成的sql为order by id。
3. #{}方式能够很大程度防止sql注入。
4. ${}方式无法防止Sql注入。
5. ${}方式一般用于传入数据库对象,例如传入表名。
6.原生jdbc不支持占位符的地方我们就可以使用${}进行取值,例如查询某一年的员工工资表格:select * from ${year}_salary where xxx;

看到这些我就将我的代码改了下,发现OK了

 <select id="getUserList" resultMap="BaseResultMap" parameterType="map">
  	select 
  	    <include refid="Base_Column_List" />
  	from user 
  	   <if test='fleld != null and fleld != ""'>
  	        ORDER BY ${fleld}
          </if> 
          <if test='order != null and order != ""'>
              ${order}
          </if>
  	limit #{start},#{limit}
  </select>

这里写图片描述
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值