今天在公司写代码的时候,想到有这样的需求,就是点击不同的按钮,跳转到同一个页面,但根据不同的条件对查询出来的结果进行排序。因为有六七种情况,所以我不可能相同的代码重复写六七遍,仅仅是查询条件不同。

所以自然而然的就想到传入一个参数给sql语句,然后使用order by进行排序。

因为之前一直使用#运算符,所以一如既往,使用#运算符就干,然鹅结果却是不起作用,看了一下输出日志,发现是这样输出的

select * from tableName order by ?;
parameter:columnName(String)

看看没啥毛病啊,实在不理解,就去查阅资料,发现和$、#运算符有关。

(1)使用#运算符,Mybatis会将传入的对象当成一个字符串,在进行变量替换时会加上引号,所以上面的order by语句,替换后就变成了下面的样子

select * from tableName order by 'columnName';

虽然不会报错,但也不能正确排序

(2)使用$运算符,Mybatis不会进行预编译,直接把值传进去,无法防止sql注入,当我们需要传字段的名称时,可以考虑使用$符号,但在后台需要进行数据校验,才能在一定程度上防止sql注入。

sql注入
比如一个登陆的sql语句如下

select * from user where user_id = 'CodeTiger' and password = '123456';

当我们输入CodeTiger 123456的时候,自然能登陆成功。

然鹅当我们输入CodeTiger’;–,不论输入什么密码,都能够正确登陆,因为此时sql语句变成了下面的样子

select * from user where user_id = 'CodeTiger';--' and password = '123456';

后面的密码校验部分被注释了。这就是一个sql注入的小例子,当然实际中远远不止这么low,只是为了说明sql注入是什么。

Mybatis使用order by语句相关推荐

  1. mybatis多字段排序_解决mybatis中order by排序无效问题

    1.#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #{user_id},如果传入的值是111,那么解析成sql时的值为order by "111&qu ...

  2. MySQL Order by 语句用法与优化详解

    Order by语句是用来排序的,经常我们会使用到Order by来进行排序,下面我给大家来讲讲Order by用法与优化排序,有需要的同学可参考 MySQL Order By keyword是用来给 ...

  3. Mybatis映射文件SQL语句模糊查询,#和$的区别和注意事项

    Mybatis映射文件SQL语句模糊查询 1. "%"#{value}"%" 在参数中不需要添加 %_ 推荐使用 2. '%${value}%' 在参数中不需要 ...

  4. 从SQL SERVER 2000到SQL SERVER 2005 视图中存在 ORDER BY 语句的完全解决方案

    首先要看微软的一个官方文章: http://support.microsoft.com/kb/926292/ 文章中提到的补丁程序并未公开,需要与微软联系,工程师会给你下载地址和安装密码.我这里有一个 ...

  5. mysql 优化代码_MySQL Order by 语句优化代码详解

    Order by语句是用来排序的,经常我们会使用到Order by来进行排序,下面我给大家来讲讲Order by用法与优化排序,有需要的同学可参考 MySQL Order By keyword是用来给 ...

  6. SQL注入:3、无权读取information_schema库和拒绝union、order by语句

    3.无权读取information_schema库和拒绝union.order by语句 information_schema: 3. information_schema: 想要查询这张表,必须是r ...

  7. mybatis直接执行sql语句后续之一

    在上一篇文章中,我们提到了让mybatis直接执行sql语句. http://xiabin1235910-qq-com.iteye.com/blog/1748886 接下来介绍在上一篇文章的基础上,我 ...

  8. mysql order by 语句_Mysql优化order by语句的方法详解

    本篇文章我们将了解ORDER BY语句的优化,在此之前,你需要对索引有基本的了解,不了解的老少爷们可以先看一下我之前写过的索引相关文章.现在让我们开始吧. MySQL中的两种排序方式 1.通过有序索引 ...

  9. MySQL——优化ORDER BY语句

    本篇文章我们将了解ORDER BY语句的优化,在此之前,你需要对索引有基本的了解,不了解的朋友们可以先看一下我之前写过的索引相关文章.现在让我们开始吧. MySQL中的两种排序方式 1.通过有序索引顺 ...

  10. java day55【 Mybatis 连接池与事务深入 、 Mybatis 的动态 SQL 语句、 Mybatis 多表查询之一对多 、 Mybatis 多表查询之多对多】...

    第1章 Mybatis 连接池与事务深入 1.1 Mybatis 的连接池技术 1.1.1 Mybatis 连接池的分类 1.1.2 Mybatis 中数据源的配置 1.1.3 Mybatis 中 D ...

最新文章

  1. 【Data】数据结构之C++程序设计(1)
  2. Centos普通用户提权至ROOT
  3. PL/SQL developer连接oracle出现“ORA-12154:TNS:could not resolve the connect identifier specified”问题的解决
  4. ACM之【运算符重载结合STL】
  5. android分辨率对应关系,android各dpi与分辨率的对应关系
  6. TransactionAwareDataSourceProxy
  7. SpringCloud Hoxton版微服务-RestTempalte + @LoadBlanced 实现负载均衡
  8. 手把手教你写一个spring IOC容器
  9. 大数据之-Hadoop之HDFS的API操作_修改文件的名称---大数据之hadoop工作笔记0060
  10. 简单的dp(dp专题)
  11. ARC对象内存管理以及强弱指针
  12. NPOI导出EXCEL报_服务器无法在发送 HTTP 标头之后追加标头
  13. XenCenter 创建 New Storage Repository
  14. c#实现短信发送程序
  15. MPEG Audio 简述
  16. 数组的参数必须是 ByRef
  17. 有名管道----mkfifo函数的使用
  18. R155附录5 Part A
  19. 设计模式(10)——外观模式
  20. 调度工具(ETL+任务流)

热门文章

  1. 入侵网络游戏服务器修改,如何入侵网络游戏服务器
  2. 翠贝卡VR 2017:把故事交到观众的手里
  3. Android事件分发机制综述
  4. edge设置IE兼容模式
  5. 嵌入式方向的毕业生,找工作很迷茫
  6. 很迷茫,30岁,大专学历,没有一技之长,负债累累,怎么翻身?
  7. less06 引入(importing)
  8. android 显示网速,随着掌握联网状态 Android手机如何显示实时网速
  9. php json输出后 u6563,肉肉's Blog
  10. 计算机ps基础考试题,2014计算机一级考试PS及基础模拟试题