最近在练习easyui的时候做到datagrid的时候 用到点击字段进行 降序,升序 的时候发现无论怎么点 数据都不会变,
开始以为是easyui-datagrid中配置错了,改了半天也没有发现. 然后去看了下mybatis发出的sql和查询结果.


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

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

这里用了#,应该是用$. 这里因为我要查询 是根据一个数据库字段名 所以应该用$
${ } 变量的替换阶段是在动态 SQL 解析阶段,而 #{ }变量的替换是在 DBMS 中。
#{} 和 ${}主要的区别,除此之外,还有以下区别:
- #方式能够很大程度防止sql注入。
- $方式无法防止Sql注入。
- $方式一般用于传入数据库对象,例如传入表名.
- 一般能用#的就别用$.
当我将mapper,xml文件的# 替换 为 $的时候 ,再看mybatis发出的sql语句
$,和#的区别就明显出来了
之前:

之后;

看到区别 就和上面所说 : ${ } 变量的替换阶段是在动态 SQL 解析阶段
以后一定要仔细,,,
本文记录了一次使用EasyUI datagrid时遇到的排序问题排查过程,最终发现是由于MyBatis中SQL参数绑定方式错误导致的数据不更新问题。文中详细解释了#{}
5355





