mybatis-plus建议在LambdaQueryWrapper中,增加强类型约束

猿类崛起了 发布于 12/03 11:27
阅读 40
收藏 0

@青苗 我想提点改进的建议

下面这种写法是正确的

User user = mapper.selectOne(new QueryWrapper<User>().lambda().eq(User::getId, 2));

然鹅,这样写也能通过编译,编译不报错,等到运行就出错了,因为id是数字,不是字符。

User user = mapper.selectOne(new QueryWrapper<User>().lambda().eq(User::getId, "2"));

问题在于没有对值进行验证,我觉得应该对值加类型限制,方法改为类似于如下这种

eq(Expression<? extends Number> x, Number y);

这样的话如下语句是会报错,无法通过编译的。因为会限制了值只能为age相同的类型。

eq(User::getId, "2");
加载中
0
青苗
青苗

非常感谢您的建议,实际上这个地方如果写死强类型应用范围变窄了故而不能强制类型

猿类崛起了
我觉得可以搞个LambdaEq的方法,最大发挥Lambda的强类型检测优势,想用强类型检测的可以用,不想用的依旧用老的,这样都能兼顾。至于应用范围,LambdaEq(<? extends T> x, T y) 这样完美解决参数类型和值的类型一致的问题。
返回顶部
顶部