(1).根据Id删除
//根据Id删除
@Test
public void deleteById() {
// 返回影响行数,删除1个数据,就影响一行
int count = userMapper.deleteById(1508714176735117313L);
System.out.println(count);
}
(2).批量删除
//根据id批量删除
@Test
public void batchDelete() {
// 返回影响行数,删除多个数据,就影响多行
int count = userMapper.deleteBatchIds(Arrays.asList(1508714176735117313L, 1508714176735117313L));
System.out.println(count);
}
(3).条件删除
//条件查询
@Test
public void conditionDelete() {
/**
* name = 东方不败,age= 20
*
* */
Map<String, Object> columnMap = new HashMap<>();
columnMap.put("name", "东方不败");
columnMap.put("age", 20);
int count = userMapper.deleteByMap(columnMap);
}
(4).逻辑删除
- 物理删除:真实删除,将对应的数据从数据库中,之后查询不到此条被删除数据;
- 逻辑删除:假删除,将对应数据中代表是否被删除字段状态修改为“被删除状态”,之后再在数据库中仍旧能看到此条数据记录。在表中增加is_delete字段来标识是否删除,查询时可以根据这个字段跳过。
如果您有兴趣,可以详细了解一下物理删除与逻辑删除的作用场景
逻辑删除的使用场景:
- 可以进行数据恢复;
- 有关联数据,不便删除。
在表添加Int型deleted 字段,作为逻辑删除标志,每次执行删除时,修改标志位。 0 表示没有删除,1
表示删除。并且修改实体类,添加新的属性Intger型的deleted
@Data
public class User {
//
@TableId(type = IdType.ASSIGN_ID)
private Long id;
private String name;
private Integer age;
private String email;
// 驼峰命名 对应的数据库的字段create_time、update_time
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
// 乐观锁 Version属性
@TableField(fill = FieldFill.INSERT)
@Version
private Integer version;
// 逻辑删除 deleted属性
@TableLogic
@TableField(fill = FieldFill.INSERT )
private Integer deleted;
}
当我们配置逻辑删除后,为了演示效果。我们直接在后台修改部分数据的逻辑状态,将它们设为1
。权当它们已经被“逻辑删除”了,接下来我们再执行查询所有`findAll方法。思考一下,在控制台中,会显示全部记录吗?而目前数据库后台有10条记录,我修改其中2条记录的deleted为1,其他的设为0,那么控制台又会显示几条记录呢?
答案很明显,结果只有8条。不过这里通过sql日志,可以发现,配置完逻辑删除后,再执行查询操作,会添加限制条件了where deleted = 0,默认查询没有被“逻辑删除”的数据。
(5).物理删除
数据可贵!删除请三思!