本文主要介绍MybatisPlus中删除和逻辑删除的相关知识。删除分为逻辑删除和物理删除,那么两者有什么区别呢?这篇文章会给你详细的介绍,感兴趣的朋友可以和边肖一起看看。
删除分为逻辑删除和物理删除,那么两者有什么区别呢?
物理删除:实删除,从数据库中删除相应的数据。之后,删除的数据就找不到了。
逻辑删除:假删除,将对应数据中字段的状态改为“已删除状态”,然后在数据库中仍然可以看到这条数据记录。
在我们的日常开发中,为了保留数据,经常会使用逻辑删除来删除数据。我们来看看物理删除和逻辑删除是怎么实现的。
首先,假设我有这样一张表。
类别:
包com . at guigu . my batis _ plus . entity;
导入Java . util . date;
导入com . baomi dou . mybatisplus . annotation . field fill;
导入com . baomi dou . mybatisplus . annotation . id type;
导入com . baomi dou . mybatisplus . annotation . table field;
导入com . baomi dou . mybatisplus . annotation . tableid;
导入com . baomi dou . mybatisplus . annotation . table logic;
进口龙目岛。数据;
@数据
公共类用户{
@TableId(type=IdType。自动)
私有长id;
私有字符串名称;
私有整数年龄;
私人字符串电子邮件;
@TableField(fill=FieldFill。插入)
私人日期创建时间;
//@TableField(fill=FieldFill。更新)
@TableField(fill=FieldFill。插入_更新)
私人日期更新时间;
}
用户映射程序接口:
包com . at guigu . mybatis _ plus . mapper;
导入com . at guigu . my batis _ plus . entity . user;
导入com . baomi dou . mybatisplus . core . mapper . base mapper;
//UserMapper继承BaseMapper后有CRUD函数。
公共接口用户映射程序扩展BaseMapperUser{
}
一.物理删除
1.根据id删除记录
@测试
public void testLogicDelete() {
int count=user mapper . delete byid(1L);//删除id为1的数据
System.out.println(受影响的行数 count);
}
2.批量删除
@测试
public void testDeleteBatchIds(){
int result=user mapper . deletebatchids(arrays . as list(2,3,4));//删除id为2,3,4的数据
System.out.println(结果);
}
结果:
物理删除比较简单。接下来,我们来看看如何实现逻辑删除!
二、逻辑删除
(1)数据库修改,添加删除的字段
(2)修改实体类,添加删除的字段,添加@TableLogic注释
/*
当添加@TableLogic时,delete语句将在程序内变为update语句。
其实我们写的代码不需要改。
*/
@TableLogic
私有整数已删除;
(3)测试
/**
*逻辑删除
*/
@测试
public void testLogicDelete() {
int count=user mapper . delete byid(5L);
System.out.println(受影响的行数 count);
}
结果:
测试后发现数据没有被删除,被删除字段的值从0变成了1。
测试分析后打印的sql语句是一个更新。
注意:在删除之前,数据的已删除字段的值必须为0,以便可以选择进行逻辑删除。
(5)逻辑删除后测试查询,MyBatis Plus中的查询操作会自动添加逻辑删除字段的判断。
@测试
public void testSelect() {
list user users=user mapper . select list(null);//查询所有记录
users . foreach(system . out:println);//遍历输出
}
结果:
总结
关于MybatisPlus中的删除和逻辑删除以及区别介绍这篇文章到此为止。更多关于MybatisPlus删除和逻辑删除的相关内容,请搜索我们之前的文章或者继续浏览下面的相关文章。希望大家以后能多多支持我们!