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

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

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

使用mybatis查出数据与mysql查出来的不一致(order by)_第1张图片使用mybatis查出数据与mysql查出来的不一致(order by)_第2张图片

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

使用mybatis查出数据与mysql查出来的不一致(order by)_第3张图片

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

mapper.xml文件中


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

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

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

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

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

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

之前:


之后;


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

以后一定要仔细,,,

你可能感兴趣的:(mysql)