yulichang / mybatis-plus-join

支持连表查询的mybatis-plus,mybatis-plus风格的连表操作提供wrapper.leftJoin(),wrapper.rightJoin()等操作
https://yulichang.github.io/mybatis-plus-join-doc/
Apache License 2.0
971 stars 113 forks source link

使用LamdaQuery order by排序的时候,被连接的表只能使用字段名么 #122

Closed phsy closed 1 month ago

phsy commented 1 month ago

当前使用版本(必填,否则不予处理)

1.4.11

该问题是如何引起的?(确定最新版也有问题再提!!!)

用A left join B,结果需要按B.ORDER_NO ASC,A.ORDER_NO ASC, A.NAME排序

重现步骤(如果有就写完整)

MPJLambdaWrapper<A> wrapper = MPJWrappers.lambdaJoin(A.class)
        .selectAll()
        .leftJoin(B.class, "b", B::getId, A::getPId);
...
wrapper.orderByAsc("b.ORDER_NO");
wrapper.orderByAsc(A::getOrderNo, A::getName);

报错信息

只能使用上面的写法,如果直接写 wrapper.orderByAsc(B::getOrderNo, A::getOrderNo, A::getName); 会报语法错误

是不是非主表的排序都只能用传字符串的方式添加排序规则?

yulichang commented 1 month ago

一个orderByAsc只能对一张表,你这个要两次orderByAsc

phsy commented 1 month ago

要两次orderByAsc 这个能给个代码示例么? wrapper 的类型是MPJLambdaWrapper<A> ,写wrapper.orderByAsc(B::getOrderNo) 是会直接报红,编译都过不去 只能写成

wrapper.orderByAsc("b.ORDER_NO");
wrapper.orderByAsc(A::getOrderNo, A::getName);