使用mybatis查出数据与mysql查出来的不一致(order by)

本文记录了一次使用EasyUI datagrid时遇到的排序问题排查过程,最终发现是由于MyBatis中SQL参数绑定方式错误导致的数据不更新问题。文中详细解释了#{}

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在练习easyui的时候做到datagrid的时候 用到点击字段进行 降序,升序 的时候发现无论怎么点 数据都不会变,

开始以为是easyui-datagrid中配置错了,改了半天也没有发现.  然后去看了下mybatis发出的sql和查询结果.


查出来才发现 不是easyui的错,而是查询出来的结果都一样.然后又去mysql中查了一下.发现mysql中查出来没有问题


然后我就懵了,都是一样的sql为啥查出来的不一样,找了半天的度娘也没有解决办法.后来问群里大佬才知道是sql注入出错,最简单的问题.

mapper.xml文件中


这里用了#,应该是用$.    这里因为我要查询 是根据一个数据库字段名 所以应该用$

 ${ } 变量的替换阶段是在动态 SQL 解析阶段,而 #{ }变量的替换是在 DBMS 中。

 #{} 和 ${}主要的区别,除此之外,还有以下区别:

  • #方式能够很大程度防止sql注入。
  • $方式无法防止Sql注入。
  • $方式一般用于传入数据库对象,例如传入表名.
  • 一般能用#的就别用$.

 当我将mapper,xml文件的# 替换 为 $的时候  ,再看mybatis发出的sql语句 

 $,和#的区别就明显出来了

之前:


之后;


看到区别 就和上面所说 :    ${ } 变量的替换阶段是在动态 SQL 解析阶段

以后一定要仔细,,,

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值