使用lambda解决Java中的硬编码问题

一、硬编码问题

From 维基百科:
硬编码(hard-coding)是指在软件实现上,将输出或输入的相关参数(例如:路径、输出的形式或格式)直接以常量的方式撰写在源代码中,而非在执行期间由外界指定的设置、资源、资料或格式做出适当回应。

在Java代码当中,对于User类,user_id属性对应的数据库表中的字段(列名)为user_id

public class User {
	private Long userId;
}

使用QueryWrapper直接根据数据库表的列名进行查询的方式就属于硬编码

QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("user_id", 5);
List<User> users = userDao.selectList(wrapper);

上面这类硬编码代码有一个缺点,如果实际开发环境中,数据库表结构经常发生变动,与变动的列相关的代码都需要进行修改。

二、使用lambda解决硬编码问题

为了解决上述问题,可以使用lambda,有两种方案可供选择:

第一种:仍然使用QueryWrapper
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.lambda().eq(User::getUserId, 5);
List<User> users = userDao.selectList(wrapper);
第二种:使用LambdaQueryWrapper
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getUserId, 5);
List<User> users = userDao.selectList(wrapper);

在使用Lambda后,即使数据库表结构发生变化,只要User类中的属性名userId不变,上述代码便不需要进行修改,大大降低了后期代码的维护成本。当然,前提是要建立好实体类与数据库表的映射关系

三、关于QueryWrapper性能的一点讨论

使用QueryWrapper可以方便我们通过Java代码对数据库进行操作,避免编写过多的SQL语句。

考虑如下情况,仅需要在代码中获取所有的用户的userName,不需要其他字段。如果用QueryWrapper,返回的对象包含所有的属性,只不过除userName外其他字段均为null。

在这种情况下,应该是直接用SQL语句进行查询,效率高一点吧。(不太确定,大家有什么见解可以评论一下,这个后续有时间了,做个对比实验看看。)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值