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

发布于 2021-12-04 02:55:21 字数 839 浏览 814 评论 2

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

下面这种写法是正确的

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

柠檬 2021-12-08 05:07:49

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

居里长安 2021-12-07 21:23:53

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文