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

3.4.0

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

一般自定义sql会使用到wrapper时,基本sql都是多表查询,如果单表查询没有必要使用自定义的sql,使用mybatis-plus自带的查询就够了。但多表查询时如果下所示,${ew.customSqlSegment}获取到的查询条件并不支持表的别名,会导致sql执行异常。因此,目前自定义sql使用wrapper的作为查询条件的场景,有点鸡肋,希望可以支持指定表的别名。

@Select("select * from mysql_data1 a left join mysql_data2 b on b.id=a.fid ${ew.customSqlSegment}")
List<MysqlData> getAll(@Param(Constants.WRAPPER) Wrapper wrapper);

Comment From: nsioo

Comment From: ETUFO

QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.eq("a.id",1L); testMapper.select(queryWrapper);

@Select("select * from test a left join test2 b on b.id=a.id ${ew.customSqlSegment}") List select(@Param(Constants.WRAPPER) Wrapper wrapper);

sql :select * from test a left join test2 b on b.id=a.id WHERE (a.id = ?) 别名好像没问题

Comment From: wolfeke

QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.eq("a.id",1L); testMapper.select(queryWrapper);

@Select("select * from test a left join test2 b on b.id=a.id ${ew.customSqlSegment}") List select(@Param(Constants.WRAPPER) Wrapper wrapper);

sql :select * from test a left join test2 b on b.id=a.id WHERE (a.id = ?) 别名好像没问题

但是下面这样就不行了,希望可以使用lambda,使用字符串的话,不好维护,比如哪天要查找引用都不好找。

QueryWrapper queryWrapper = new QueryWrapper(); 
queryWrapper.eq(TestTable::getId,1L); 
testMapper.select(queryWrapper);

Comment From: miemieYaho

不支持,你非要使用lambda表达式那你应该参考我们内部是如何进行转换的你再写个工具类来搞