by mybatis 自定义order_自定义SQL方法,只传递orderBy,不传递where条件,出现了BUG。...

博客内容涉及一个SQL查询问题,该查询在MyBatis-Plus中执行时出现错误,原因是`ORDER BY`语句紧接在`WHERE`之后,导致解析异常。代码片段展示了如何通过MyBatis-Plus的`Wrapper`和`Mapper`方法进行自定义SQL查询,并处理分组计算。问题在于当没有自定义SQL时,查询正常运行。调用代码显示了如何调用这个查询方法。
摘要由CSDN通过智能技术生成

自定义SQL

SELECT

vehicle_model_id,

vehicle_model_code,

vehicle_model_name,

COUNT(1) total,

SUM(mileage) mileage,

SUM(averageSpeed) / COUNT(1) averageSpeed,

SUM(mileage) / COUNT(1) averageMileage,

SUM(energy) energy,

SUM(energy) / COUNT(1) averageEnergy,

SUM(electricQuantity) electricQuantity,

SUM(electricQuantity) / COUNT(1) averageElectricQuantity,

SUM(charge) charge

FROM

${tableName} AS d

JOIN

business_info AS b ON d.did = b.did

GROUP BY vehicle_model_id , vehicle_model_code , vehicle_model_name

${ew.sqlSegment}

Mapper

List selectVehicleModelMileageDayStatistics(RowBounds rowBounds, @Param("tableName") String tableName, @Param("ew") Wrapper wrapper);

实现类

@Override

public Page vehicleModelMileageDayStatistics(String groupId, List vehicleModelCodeList, String day, String sortColumn, Boolean isAsc, Page page) {

Wrapper wrapper = new EntityWrapper<>();

if (StrUtil.isNotBlank(groupId)) {

wrapper.like(Business_info.GROUP_PATH, "#" + groupId + "#");

}

String tableName = "day";

if (StrUtil.isNotBlank(day)) {//如果传递了yyyyMMdd

if (day.equals(DateUtil.format(new Date(), "yyyyMMdd"))) {//查询今天

} else {

tableName += "_" + day;

}

}

if (CollectionUtil.isNotEmpty(vehicleModelCodeList)) {

wrapper.in("vehicle_model_code", vehicleModelCodeList);

}

if (StrUtil.isNotBlank(sortColumn)) {

if (isAsc != null) {

wrapper.orderBy(sortColumn, isAsc);

} else {

wrapper.orderBy(sortColumn);

}

}

page.setRecords(dayService.selectVehicleModelMileageDayStatistics(page, tableName, wrapper));

return page;

}

调用代码

Page p = bigDataNeApi.vehicleModelMileageDayStatistics("", null, "20170728", "mileage", false, new Page(1, 100));

log.info("{}", JSON.toJSONString(p, SerializerFeature.PrettyFormat));

mybatis-plus生成的语句为

SELECT vehicle_model_id, vehicle_model_code, vehicle_model_name, COUNT(1) total, SUM(mileage) mileage, SUM(averageSpeed) / COUNT(1) averageSpeed, SUM(mileage) / COUNT(1) averageMileage, SUM(energy) energy, SUM(energy) / COUNT(1) averageEnergy, SUM(electricQuantity) electricQuantity, SUM(electricQuantity) / COUNT(1) averageElectricQuantity, SUM(charge) charge FROM day AS d JOIN business_info AS b ON d.did = b.did GROUP BY vehicle_model_id , vehicle_model_code , vehicle_model_name WHERE ORDER BY mileage DESC

where 那个地方后面直接就跟了order by 导致错误。

难道映射文件不应该???

${ew.sqlSegment}

不是自定义的sql就没有出现这个问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值