当前使用版本(必填,否则不予处理)
implementation("com.baomidou:mybatis-plus-boot-starter:3.5.2")
该问题是如何引起的?(确定最新版也有问题再提!!!)
https://github.com/baomidou/mybatis-plus/blob/4ed4d2a3c65ce2f9c7047fd5f38512fd436a997a/mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/segments/NormalSegmentList.java#L90 当嵌套查询条件为空时,不应该在 sqlSegment 的两侧添加括号
重现步骤(如果有就写完整)
在复杂的业务场景下可能会构造出等效于下面的 LambdaQueryWrapper:
userMapper.selectList(new LambdaQueryWrapper<SysUser>().and(q -> q.eq(false, SysUser::getId, 1L)));
报错信息
Caused by: org.springframework.dao.DataIntegrityViolationException:
### Error querying database. Cause: org.h2.jdbc.JdbcSQLDataException: Data conversion error converting "ROW to BOOLEAN"; SQL statement:
SELECT id,name FROM SYS_USER
WHERE () [22018-214]
### The error may exist in com/example/simplespirngboot/mapper/UserMapper.java (best guess)
### The error may involve com.example.simplespirngboot.mapper.UserMapper.selectList
### The error occurred while executing a query
### SQL: SELECT id,name FROM SYS_USER WHERE ()
Comment From: qmdx
这样就行了 userMapper.selectList(new LambdaQueryWrapper<SysUser>().eq(false, SysUser::getId, 1L));
Comment From: miemieYaho
自行考虑规避
Comment From: xtyuns
在简单的条件下的确可以通过人工干预的方式避免此类错误的发生,但是在真实的使用过程中可以会出现远比以下查询条件复杂的情况。 而且我认为这个问题应该属于 MBP 中的一个缺陷,MBP 作为开源项目应该借助自身优势吸取来自社区用户的反馈不断优化和提升自己,而非让用户来自行避免诸如此类的情况:
userMapper.selectList(
new LambdaQueryWrapper<SysUser>()
.eq(false, SysUser::getName, "Foo")
.and(
q -> q.eq(false, SysUser::getId, 1L)
.or()
.eq(false, SysUser::getType, "")
)
.and(
q -> q.eq(false, SysUser::getAge, 1)
.or()
.eq(false, SysUser::getLevel, 1)
)
);
Comment From: NiMengSL
mp的开发拽的很, 根本不鸟人
Comment From: NiMengSL
解决不了问题就解决提出问题的人 hhh