• 关于实现mybatis order by 排序传递参数实现 问题记录


    一    问题场景:本人项目纯纯的后端系统  并且项目前端采用纯纯的原生js 实现

            1)表格  通过查询列表数据放入到域中  前段采用 for循环的方式实现遍历生成列表

            2)分页实现本人是公司内部自定义实现的分页没有采用任何外部框架  分页实现是公司内部自定义封装的

           要求:要点击列表表头字段实现按照表头信息排序

            解决思路:

           由于我的列表是由多个表中数据关联查询出来的所以要实现根据不同的列头实现排序   那么久要将查询结果在包装成一个表  在通过select * from 结果表  order by 排序字段  方式实现

          涉及问题:传递排序列 头  对应的表字段  同时传递 排序方式  是asc 还是desc 两个参数  

    二  解决

          1)有问题了???  mybatis 传参  大家都会  常采用的方式   #{} 方式接收参数占位  这样可以防止sql注入  #{}实现预编译

             我同样在mybatis mapper.xml 文件中通过   select * from 表  order by #{字段} #{排序方式}

             查看打印日志:完全正确  并且将日志信息拷贝出来到数据库执行打印sql  没有问题

             然而。。。。。在通过断点却发现一直查询结果并没有实现排序??????????????

              问题:mybatis #{} 在接收参数的时候会给接收的参数  添加双引号   那么上面的sql 实现就是

              select * from table_name order by  "fullName"   "desc"

             这种形式的日志是无法发现的  同时在编译过程以及运行都没有报错但是   将"fullName"  以及 “desc”  解析时候“fullName” 并没有当表中字段解析 “desc” 也认为是一个字符串  没有识别说是数据库关键字  导致查询没有异常 但是不能正确返回查询结果

           2)解决方案

             将#{} 替换成${}

             select * from table_name order by ${}${}    但是${} 无法防止sql注入

         

  • 相关阅读:
    启用 Win10 的 Linux 子系统
    破解 RHEL7.3 的 root 密码
    实战:tcpdump抓包分析三次握手四次挥手
    grep中的正则表达式
    快速配置yum本地源
    Kubernetes 集群搭建(下)
    从事游戏行业也有10年,让我来说下游戏的本质,为什么上瘾。
    Egret 生成 自带EUI 的微信小游戏 踩坑!
    JMeter入门
    像屎一样的 Spring Boot入门,总算有反应了
  • 原文地址:https://www.cnblogs.com/lwdmaib/p/9995003.html
Copyright © 2020-2023  润新知