使用mybatis查出数据与mysql查出来的不一致(order by)
最近在练习easyui的时候做到datagrid的时候 用到点击字段进行 降序,升序 的时候发现无论怎么点 数据都不会变,开始以为是easyui-datagrid中配置错了,改了半天也没有发现. 然后去看了下mybatis发出的sql和查询结果.查出来才发现 不是easyui的错,而是查询出来的结果都一样.然后又去mysql中查了一下.发现mysql中查出来没有问题然后我就懵了,都是一样的sql
·
最近在练习easyui的时候做到datagrid的时候 用到点击字段进行 降序,升序 的时候发现无论怎么点 数据都不会变,
开始以为是easyui-datagrid中配置错了,改了半天也没有发现. 然后去看了下mybatis发出的sql和查询结果.
查出来才发现 不是easyui的错,而是查询出来的结果都一样.然后又去mysql中查了一下.发现mysql中查出来没有问题
然后我就懵了,都是一样的sql为啥查出来的不一样,找了半天的度娘也没有解决办法.后来问群里大佬才知道是sql注入出错,最简单的问题.
mapper.xml文件中
这里用了#,应该是用$. 这里因为我要查询 是根据一个数据库字段名 所以应该用$
${ } 变量的替换阶段是在动态 SQL 解析阶段,而 #{ }变量的替换是在 DBMS 中。
#{} 和 ${}主要的区别,除此之外,还有以下区别:
- #方式能够很大程度防止sql注入。
- $方式无法防止Sql注入。
- $方式一般用于传入数据库对象,例如传入表名.
- 一般能用#的就别用$.
当我将mapper,xml文件的# 替换 为 $的时候 ,再看mybatis发出的sql语句
$,和#的区别就明显出来了
之前:
之后;
看到区别 就和上面所说 : ${ } 变量的替换阶段是在动态 SQL 解析阶段
以后一定要仔细,,,
更多推荐
已为社区贡献2条内容
所有评论(0)