现在可以说用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中非常常见的。好了,先写到这,感谢阅读。

1306

被折叠的 条评论
为什么被折叠?



