一、 QueryWrapper

之前自己做项目时一直使用的是QueryWrapper去进行数据的操作,代码如下:

QueryWrapper<DomainTb> wrapper = new QueryWrapper<>();
wrapper.eq("domain_id",domainId);
list(wrapper);

以上是根据domain_id条件查询列表,使用这种方式会出现什么问题呢?

如果数据库中的字段改名了把domain_id改为id,那是不是要把所有使用domain_id的代码都改一遍,那工作量可想而知。

二、LambdaQueryWrapper

既然有问题,就有解决问题的办法。LambdaQueryWrapper的使用代码如下:

LambdaQueryWrapper<DomainTb> wrapper = Wrappers.lambdaQuery();
wrapper.eq(DomainTb::getDomainId,domainId);
list(wrapper);

可以直接在原来的基础上引入lambda(wrapper.lambda),避免了使用domain_id的硬编码。也可以直接使用LambdaQueryWrapper的构造器,还有一种方式,就是上面代码的方式,使用

Wrappers.lambdaQuery()来创建。

为什么要使用Wrappers.lambdaQuery()?因为源码上建议的,咱们就这么整肯定没毛病。上网上查了查:lambdaQuery 可用屏蔽底层的具体实现,未来会有变化上层代码无需过多的调整。

 /**
     * 不建议直接 new 该实例,使用 Wrappers.lambdaQuery(entity)
     */
    public LambdaQueryWrapper() {
        this((T) null);
    }

    /**
     * 不建议直接 new 该实例,使用 Wrappers.lambdaQuery(entity)
     */
    public LambdaQueryWrapper(T entity) {
        super.setEntity(entity);
        super.initNeed();
    }

它还支持链式编程,可读性差,但是用来装装可以。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐