根据前端实体类属性加排序方式传值,后端mybatis中排序,postgresql order by排序报错

后台Dao层用的mybatis框架,数据库是postgresql, 通bootstrap.js传值,把实体类属性和排序方式(entityPro asc)传到后端做排序,因为前台传的是实体类的属性(有驼峰)加排序方式,mybatis排序用的order by ${orderBy}的方式,其中${orderBy}里内容就是“实体类属性加排序方式“,进行列表查询排序时就报错了!
查询语句是:

select a.entity_pro as "entityPro" 
from table_name a order by ${orderBy};

最后sql语句被解析成了
select a.entity_pro as "entityPro" 
from table_name a order by entityPro asc;

注意:${} 解析后不带双引号,而#{}解析时会加双引号,#{}做排序
不起作用,故用的${};

报错提示错误: 字段 “entitypro” 不存在,也许您想要引用列"a.entity_pro"。
我的解决办法是改为select a.entity_pro as entityPro,去除双引号,具体原因我分析是 mybatis中${orderBy}替换为了不带双引号的 entityPro asc,而我一开始 select a.entity_pro
as “entityPro” 是加双引号的,所以就出现了这个问题,解决方法就是去掉双引号。

把报错的sql放入了本地Navicat中进行测试
测试一:as “entityPro” 加双引号 报错了

select a.entity_pro as "entityPro" from table_name a order by entityPro desc

测试二:as entityPro 不加双引号 不报错

select a.entity_pro as entityPro from table_name a order by entityPro desc

测试三:as “entityPro” 转为小写 as “entitypro”,下面两个都不报错

select a.entity_pro as “entitypro” from table_name a order by entitypro desc

select a.entity_pro as entitypro from table_name a order by “entitypro” desc

总结:这个和postgresql有关系,要么实体类属性全部改为小写,要么查询时as 后面去掉双引号。

其他相关问题解决办法可以参考:
https://www.cnblogs.com/sxdcgaq8080/p/9848016.html
https://blog.csdn.net/qq_40139254/article/details/103409107

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值