后台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