SpringBoot 集成 MybatisPlus 九 | 您所在的位置:网站首页 › angular1文档 › SpringBoot 集成 MybatisPlus 九 |
1 逻辑删除的概念
逻辑删除不会在数据库中删除数据,只是通过一个字段用来标识被删除的记录,数据仍然保存在数据库中。 在实际的工作当中,因为数据非常重要,为了防止因用户误操作删除数据后无法恢复的问题,我们通常不会对数据做物理删除,即将数据从数据库中直接删除。而是多采用逻辑删除的方式,即不会真正在删除库删除数据,而是使用一个字段来标识它已经被删除。 如使用 isDeleted 字段标识该条记录是否已经被删除,0代表未删除,1代表已删除。此时对数据库做增删改查的SQL语句会发生如下变化: 插入:没有变化; 删除:转变为修改操作,即修改字段 isDeleted 为1; 修改:需要追加 where 子句,以排除 isDeleted 为1 的数据; 查询:需要追加 where 子句,以排除 isDeleted 为1 的数据。例如: 查询数据:select * from user WHERE isDeleted=0 删除数据:UPDATE user SET isDeleted=1 WHERE id=10 AND isDeleted=0 2 逻辑删除的应用 2.1 修改数据表在数据表中增加一个字段 isDeleted,并设置为数值型,默认值为0。 在程序的配置文件中,添加逻辑删除配置项 # mybatis配置信息 mybatis-plus: # 打印SQL语句 configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 全局配置 global-config: db_config: # 全局逻辑删除的字段名 logic-delete-field: isDeleted # 逻辑已删除值 logic-delete-value: 1 # 逻辑未删除值 logic-not-delete-value: 0 复制代码 2.3 修改实体类在实体类中增加 isDeleted 属性并使用注解 @TableLogic 进行修饰。 在程序中还使用了 @TableField(value = "isDeleted"),因为字段名为驼峰命令,如果不指定列名,MybatisPlus 会将列名自动识别为 is_deleted,这样就会导致与我们在数据库中设置的列名不匹配。 数据插入的操作不会受到影响 @Test public void testAddUser2(){ User user = new User(); user.setUsername("李世民"); user.setGendar("男"); user.setRemark("唐太宗"); boolean res = user.insert(); System.out.println(res); } 复制代码==> Preparing: INSERT INTO user ( username, gendar, remark, version, isDeleted ) VALUES ( ?, ?, ?, ?, ? ) ==> Parameters: 李世民(String), 男(String), 唐太宗(String), 0(Integer), 0(Integer) Preparing: UPDATE user SET isDeleted=1 WHERE id=? AND isDeleted=0 ==> Parameters: 7(Integer) Preparing: UPDATE user SET remark=?, version=? WHERE id=? AND version=? AND isDeleted=0 ==> Parameters: 1唐宗宋祖(String), 1(Integer), 22(Integer), 0(Integer) Preparing: SELECT id,username,gendar,remark,version,isDeleted FROM user WHERE isDeleted=0 ==> Parameters: |
CopyRight 2018-2019 实验室设备网 版权所有 |