我常用的能提效的mybatis plus代码片段

现在可以说用java去操作数据库,大部分都是mybatis了。它既能带来部分ORM的效率,又可以让我们实实在在的操作sql,让人安心,因为sql在我们的控制之中。

下面就介绍一下我日常用的一些mybatis plus代码判断,希望能对你的开发效率带来一点提升。

通用的update

下面这段是我昨天2026年1月4日刚写一个更新数据库数据的代码:

/**
     * 更新实体
     *
     * @param entity 实体
     */
    private void update(MaterialTomorrowEstimatedUsageEntity entity) {
        MaterialTomorrowEstimatedUsagePO po = converter.entityToPo(entity);
        mapper.updateById(po);
    }

我这边用的是DDD领域驱动设计开发,因此每次都是构建好实体后,直接把实体对象扔给仓储去更新数据库的。

我只要在上层把自增id塞入到实体里即可。剩下的就可以用mybatis plus封装好的BaseMapper去更新数据库了。

把实体用mapstruct转换成po对象后,直接

mapper.updateById(po);

就可以了。

无论你是更新数据库的哪个字段,都直接用上面这个语句就能更新到了。非常方便。

带条件的更新

这种情况下你用sql也是可以的,但是如果是简单的更新,你可以直接使用lambdaUpdate,方便快捷,又容易看懂。

    @Override
    public void softDeleteByShopIdAndMaterialCodeAndDate(Long shopId, String materialCode, String dataApplicationDay) {
        mapper.update(null,
                Wrappers.lambdaUpdate(MaterialTomorrowEstimatedUsagePO.class)
                        .eq(MaterialTomorrowEstimatedUsagePO::getShopId, shopId)
                        .eq(MaterialTomorrowEstimatedUsagePO::getMaterialCode, materialCode)
                        .eq(MaterialTomorrowEstimatedUsagePO::getDataApplicationDay, dataApplicationDay)
                        .set(MaterialTomorrowEstimatedUsagePO::getIsDeleted, 1)
        );
    }

上面是对一行数据进行软删除,通过eq构建查条件,和set构建更新操作。目前我这边的团队都是采用这种方式去更新的,因为太方便了。

只有复杂的更新,我才会要求他们使用sql语句的。

使用lambdaQuery做简单查询

同样的,简单的查询操作,也不需要用sql语句,直接用lambdaQuery就可以了。

 @Override
    public MaterialTomorrowEstimatedUsageEntity findByShopIdAndMaterialCodeAndDate(Long shopId, String materialCode, String dataApplicationDay) {
        MaterialTomorrowEstimatedUsagePO po = mapper.selectOne(
                Wrappers.lambdaQuery(MaterialTomorrowEstimatedUsagePO.class)
                        .eq(MaterialTomorrowEstimatedUsagePO::getShopId, shopId)
                        .eq(MaterialTomorrowEstimatedUsagePO::getMaterialCode, materialCode)
                        .eq(MaterialTomorrowEstimatedUsagePO::getDataApplicationDay, dataApplicationDay)
                        .eq(MaterialTomorrowEstimatedUsagePO::getIsDeleted, 0)
        );
        return converter.poToEntity(po);
    }

上面的代码是根据已有的查询条件,从数据库里查询出唯一的一条记录。再使用mapstruct将po转换成DDD中的实体对象。

如果是需要查询多条数据的,就换成selectList就可以 了。

    @Override
    public List<MaterialTomorrowEstimatedUsageEntity> findByShopIdAndDate(Long shopId, String dataApplicationDay) {
        List<MaterialTomorrowEstimatedUsagePO> poList = mapper.selectList(
                Wrappers.lambdaQuery(MaterialTomorrowEstimatedUsagePO.class)
                        .eq(MaterialTomorrowEstimatedUsagePO::getShopId, shopId)
                        .eq(MaterialTomorrowEstimatedUsagePO::getDataApplicationDay, dataApplicationDay)
                        .eq(MaterialTomorrowEstimatedUsagePO::getIsDeleted, 0)
        );
        return converter.poToEntityList(poList);
    }

小结

上面这些操作,是属于日常coding中非常常见的。好了,先写到这,感谢阅读。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值