mybatis plus 自动填充,mybatis存在更新否则新增
00-1010序:问题发现、查找原因的方法、解决方案、方法1和2、补充写作
00-1010 mybatis-Plus是mybatis的增强版,更像是面向对象编程。数据库基础CRUD的操作无需手动编写SQL语句即可完成,大大提高了开发效率。
Mybatis-plus有一个扩展功能:自动填充。该功能常见的应用场景是在插入数据时自动添加创建时间、创建人、修改时间、修改人、删除标记。通过实现MetaObjectHandler接口并重写insertFill和updateFill方法,我们可以在插入和修改数据时自动添加指定字段的值。
Mybatis-plus还有一个扩展功能:逻辑删除。当我删除一条数据时,我实际上是通过update语句修改了数据的删除标记字段。
00-1010配置自动填充时,可以通过mapper的deleteById方法修改删除标记,但修改时间字段不能自动填充,即修改了数据,但更新时间不修改为当前时间。
删除前的数据状态,删除标记为0,更新时间:2022-06-30 14:56:16。如图所示:
调用接口删除,删除标记为1,因为更新时间字段设置了数据库生成的默认时间,如果为空,系统不设置更新时间,所以更新时间为:2022-06-30 09:15336059。如图所示:
@ Transactional(roll back for=exception . class)public boolean remove byid(Long id){ int count=orderinfopmapper . delete byid(id);//逻辑删除不能自动填充更新时间if(count 0){ return true;}返回false}
系统的打印SQL语句没有设定时间。如图所示:
因为数据库没有调整时区,所以数据库的默认时间看起来有点不正常。请忽略它。至少可以看出,更新时间是数据库生成的时间,而不是应用系统设置的时间。
下面的写法不能自动填充更新时间。
@ Transactional(roll back for=exception . class)public boolean remove byid(Long id){ LambdaQueryWrapperOrderInfo query wrapper=new QueryWrapperOrderInfo()。lambda();query wrapper . eq(orderinfo :3360 getid,id);nt count=orderinfmapper . delete(query wrapper);//逻辑删除不能自动填充更新时间if(count 0){ return true;}返回false}
00-1010见官网关于逻辑删除的章节说明。查看常见问题部分。如图所示:
官方还表示删除界面自动填充功能失败。
的官方使用说明也解释了如何使用逻辑删除:
目录
00-1010根据官方提示,1. 使用更新方法并:update wrapper . set(列,值)(推荐).
代码实践如下:
@ Transactional(roll back for=exception . class)public boolean remove byid(Long id){ LambdaUpdateWrapperOrderInfo updat
eWrapper = new UpdateWrapper<OrderInfo>().lambda(); updateWrapper.eq(OrderInfo::getId, id).set(OrderInfo::getDeleteFlag, 1); int count = orderInfoMapper.update(new OrderInfo(), updateWrapper); if (count > 0) { return true; } return false;}执行SQL语句:
数据结果:
方法二
根据官方的提示1. 使用Sql注入器注入com.baomidou.mybatisplus.extension.injector.methods.LogicDeleteByIdWithFill
并使用(推荐)。查看LogicDeleteByIdWithFill
类。
发现已经被表示为过时了,但是根据注释发现,逻辑删除的时候,可以通过传入entity参数,这样就会有可能进行字段字段填充。
代码如下:
@Transactional(rollbackFor = Exception.class)public boolean removeById(Long id) { OrderInfo orderInfo = new OrderInfo(); int count = orderInfoMapper.deleteById(orderInfo.setId(id)); if (count > 0) { return true; } return false;}
SQL语句中的确自动填填充了修改时间字段的值,数据中也的确更新了修改时间。
补充写法
@Transactional(rollbackFor = Exception.class)public boolean removeById(Long id) { LambdaUpdateWrapper<OrderInfo> updateWrapper = new UpdateWrapper<OrderInfo>().lambda(); updateWrapper.eq(OrderInfo::getId,id); OrderInfo orderInfo = new OrderInfo(); orderInfo.setDeleteFlag(true); int count = orderInfoMapper.update(orderInfo, updateWrapper); // updateWrapper.eq(OrderInfo::getId, id).set(OrderInfo::getDeleteFlag, 1); // int count = orderInfoMapper.update(new OrderInfo(), updateWrapper); if (count > 0) { return true; } return false;}
@Transactional(rollbackFor = Exception.class)public boolean removeById(Long id) { LambdaUpdateWrapper<OrderInfo> updateWrapper = new UpdateWrapper<OrderInfo>().lambda(); updateWrapper.eq(OrderInfo::getId, id).set(OrderInfo::getDeleteFlag, 1); int count = orderInfoMapper.update(new OrderInfo(), updateWrapper); if (count > 0) { return true; } return false;}到此这篇关于mybatis-plus逻辑删除自动填充更新时间的文章就介绍到这了,更多相关mybatis-plus逻辑删除内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。