mybatis-plus建议在LambdaQueryWrapper中,增加强类型约束
@青苗 我想提点改进的建议
下面这种写法是正确的
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");
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我觉得可以搞个LambdaEq的方法,最大发挥Lambda的强类型检测优势,想用强类型检测的可以用,不想用的依旧用老的,这样都能兼顾。至于应用范围,LambdaEq(<? extends T> x, T y) 这样完美解决参数类型和值的类型一致的问题。
非常感谢您的建议,实际上这个地方如果写死强类型应用范围变窄了故而不能强制类型