mybatis查不出数据, 数据库可以查到 (oracle )
mybatis 查询不出数据
·
不多哔哔
问题
今天开发遇到一个问题 排查好长时间。
一个简单的查询 在mybatis 大概就是这个意思
select * from A where deleted = #{deleted}
测试的时候发现没有查出来数据。 根据日志中的sql 直接粘到 dbeaver 上
select * from A where deleted = '1'
就能查出来数据,蒙了- - 这问题很少见,排查了半天不知道问题出现在那里。
原因
后来直接在mapper 中写死 deleted 这个条件也可以查出来 用 $ 查询也可以查出来。而且只有这个字段有这个问题,
猜测问题应该出现在 某个字段上。 看了下字段类型 尼玛 是 char 类型。字段长度是10 。
oracle 中char类型 如果长度不够会自动补齐, 比如这个deleted 在库里就是 “1 ”
一般查询数据库会优化这个比如在sql 中写=‘1’ 这种就可以查出来, 而mybatis 中使用#查询 用的是参数化查询 所以就是精准匹配 。
解决方案
1 直接把字段类型给他改了 改成varchar
2 你自己手动把缺的长度给他补齐,
3 查询条件 中 deleted 字段使用函数去空格 TRIM()
4 不用占位符查询。$()
不推荐2,3
如果 使用4 的话 在入参类型上做一下限制比较好比如
入参:
class Params{
private String nameEq;
private YesOrNoEnum deleted;
}
mapper 中
where deleted = ${deleted.getCode()}
更多推荐




所有评论(0)