baomidou / mybatis-plus

An powerful enhanced toolkit of MyBatis for simplify development
https://baomidou.com
Apache License 2.0
16.12k stars 4.26k forks source link

lambdaQueryWrapper.allEq过滤器属性参数获取失败 #6294

Closed ZhangJunGuo1 closed 1 week ago

ZhangJunGuo1 commented 2 weeks ago

**

com.baomidou
        <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
        <version>3.5.7</version>
    </dependency>

**

当前环境信息 例如: Java17 + Mysql8.0

LambdaQueryWrapper lambdaQueryWrapper1 = new LambdaQueryWrapper<>(); lambdaQueryWrapper.allEq((field, value) -> { System.out.println(field+","+value); //field.contains("a");//编译报错Cannot resolve method 'contains' in 'SFunction' return true; },Map.of(User::getId, 1, User::getName, "老王")).eq(User::getAge, null); userMapper.selectList(lambdaQueryWrapper1);

上述代码为参考官方示例

//日志记录 org.example.springboot3.mybatisplus.service.UserService$$Lambda$1596/0x00000008014a60f8@290ca9d6,老王 org.example.springboot3.mybatisplus.service.UserService$$Lambda$1595/0x00000008014a5ea8@736098b5,1 [2024-06-29 22:44:45.941][http-nio-8080-exec-6][DEBUG]- org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:135) - ==> Preparing: SELECT id,name,age,email,status FROM user1 [2024-06-29 22:44:45.941][http-nio-8080-exec-6][DEBUG]- org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:135) - ==> Parameters: [2024-06-29 22:44:45.943][http-nio-8080-exec-6][DEBUG]- org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:135) - <== Total: 15

提供问题复现工程(可选) 请尽量提供复现工程,减少大家排错的时间.

nieqiurong commented 2 weeks ago

lambdaQueryWrapper1.columnToString(field) 将lambda转为字段.

ZhangJunGuo1 commented 2 weeks ago

columnToString我这个版本里面没有这个方法

nieqiurong commented 1 week ago

image

ZhangJunGuo1 commented 1 week ago

感谢您的解答,这个问题已经解决了; 方案如下: AbstractWrapper.columnsToString()的修饰符是protected,不能直接被我使用; 具体代码如下: LambdaQueryWrapper<User> lambdaQueryWrapper1 = new LambdaQueryWrapper<>(); lambdaQueryWrapper1.allEq((field, value) -> { LambdaMeta meta = LambdaUtils.extract(field); String fieldName = PropertyNamer.methodToProperty(meta.getImplMethodName()); System.out.println(fieldName+","+value); return fieldName.contains("a"); },Map.of(User::getId, 1, User::getName, "老王")).eq(User::getAge, null); userMapper.selectList(lambdaQueryWrapper1); 日志输出: name,老王 id,1 [2024-07-07 10:27:45.415][http-nio-8080-exec-8][DEBUG]- org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:135) - ==> Preparing: SELECT id,name,age,email,gender,status,create_time,update_time,deleted,other_info FROM user1 WHERE deleted=0 AND (name = ? AND age = ?) [2024-07-07 10:27:45.416][http-nio-8080-exec-8][DEBUG]- org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:135) - ==> Parameters: 老王(String), null