typeorm where 过滤参数为空的问题
typeorm 是一个不错的orm 框架,很多时候我们需要进行数据过滤处理,但是在where 参数中有一个比较大的问题
现象
最近在优化一个系统,通过数据库的监控发现了不少全表查询的处理(没有where条件),机制上应该是不正常的,然后让开发
进行代码review,是否有缺少过滤条件的处理,研发的反馈是应该没有的,但是通过对于sql 格式的分析,应该是通过orm 直接查询
生成的sql
解决
然后进行代码的review,发现有一部分数据查询有一个类似如下的处理, 其中name 是一个参数
const allUsers = await userRepository.find({
where: {
name: name
}
});
问题就出在name 参数可能为空,同时业务层没有进行空值的check,如果name 为空,typeorm 比较有意思的是对于sql 生成不进行处理,就是where 后边就不带条件了,然后现象就是生成的sql 实际就是select * from <table name> 对于db 层的问题就是全表查询
说明
实际此问题在github 上有,很多时候还是研发不细心,对于该做的数据check缺少
浙公网安备 33010602011771号