一    问题场景:本人项目纯纯的后端系统  并且项目前端采用纯纯的原生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注入

关于实现mybatis order by 排序传递参数实现 问题记录的更多相关文章

  1. mybatis order by绑定的参数

    <select id = "queryByStartWithOrder" resultType="org.seckill.entity.SuccessKilled& ...

  2. SQL Server数据库--》top关键字,order by排序,distinct去除重复记录,sql聚合函数,模糊查询,通配符,空值处理。。。。

    top关键字:写在select后面 字段的前面 比如你要显示查询的前5条记录,如下所示: select top 5 * from Student 一般情况下,top是和order by连用的 orde ...

  3. 关于Mybatis的@Param注解 及 mybatis Mapper中各种传递参数的方法

    原文:https://blog.csdn.net/mrqiang9001/article/details/79520436 关于Mybatis的@Param注解   Mybatis 作为一个轻量级的数 ...

  4. mybatis框架中 #和$传递参数的区别 和注意

    #{}: 1.  是预编译 2.  编译成占位符 3.  可以防止sql注入 4.  自动判断数据类型 5.  一个参数时,可以使用任意参数名称进行接收 ${}: 1.  非预编译 2.  sql的直 ...

  5. Spring Boot 和 Spring Cloud Feign调用服务及传递参数踩坑记录

    背景 :在Spring Cloud Netflix栈中,各个微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使用HTTP客户端.我们可以使用JDK原生的URLConnectio ...

  6. Spring Boot 和 Spring Cloud Feign调用服务及传递参数踩坑记录(转)

    https://blog.csdn.net/uotail/article/details/84673347

  7. mybatis 传递参数的方法总结

    有三种mybatis传递参数的方式: 第一种 mybatis传入参数是有序号的,可以直接用序号取得参数 User selectUser(String name,String area); 可以在xml ...

  8. MyBatis(二):Select语句传递参数的集中方案

    从别人说的方案中看出,传递参数方案还挺多,不如自己整理下,以便以后使用过程中有个笔记回忆录. 1.传递一个参数的用法: 配置文件 <select id="getById" r ...

  9. MyBatis传递参数

    MyBatis传递参数 一.使用 map 接口传递参数 在 MyBatis 中允许 map 接口通过键值对传递多个参数,把接口方法定义为 : public List<Role> findR ...

随机推荐

  1. 将springboot打包成的jar文件做成windows服务

    1.在idea中用maven将程序打成jar,放到运行的目录中. 2.去github上面下载winsw: https://github.com/kohsuke/winsw/releases 3. 将W ...

  2. 【BZOJ4573】[ZJOI2016] 大森林(LCT)

    点此看题面 大致题意: 有\(n\)棵树,初始各有\(1\)个编号为\(1\)的节点,且其为生长节点.\(3\)种操作:将\([l,r]\)区间内的树增加一个新的编号的节点,修改\([l,r]\)区间 ...

  3. Jupyter notebook远程访问linux服务器

    [转]https://blog.csdn.net/akon_wang_hkbu/article/details/78973366

  4. CF449C Jzzhu and Apples

    嘟嘟嘟 这道题正解是怎么对的其实我也不清楚,总之靠感性理解吧. 首先当然要把1到n / 2的素数都筛出来,因为两两能配对的数一定都是这些素数的倍数.这也就说明对于(n / 2, n]的素数,他们一定不 ...

  5. 2018.11.22 mac中"允许所有安装来源"的命令 & Mac窗口标题显示文件的路径

    当Mac遇到软件无法安装或者此文件已经损坏之类的时候 原因是软件为破解版,地址来源已改变,被系统拦截了,解决办法就是直接在终端中输入"sudo spctl --master-disable ...

  6. c#隐藏tabcontrol选项卡

    隐藏:Tab1.TabPage2.Parent = null;显示:Tab1.TabPage2.Parent =Tab1;tab1为tab控件名,TabPage2为选项卡名.

  7. linux下重新启动oracle

    第一步.以Oracle帐户进入Linux系统 第二步.执行以下命令查看数据库监听器的状况: lsnrctl status 或者查看数据库端口是否被监听(默认1521) netstat -ano | g ...

  8. mysql if...else 的使用

    select case when tca.id = '3' then 'vw' else epc_code end as epccode,tfp.product_id, tfp.vender, tfp ...

  9. c# 常用数据库封装

    我不为大家贴代码了,没有意思,有点多,我主要给大家介绍一下,源码会上传CSDN和GIT:我定义了一个ADO.NET操作接口,所有按照接口封装 1.sqlite数据库(需要SQLite.Interop. ...

  10. zepto 基础知识(2)

    20.append append(content) 类型:self 在每个匹配的元素末尾插入内容(内部插入).内容可以为html 字符串.dom节点,或者节点组成的数组. $('ul').append ...