逻辑删除
2024/8/6大约 1 分钟
逻辑删除
1、Mybatis-plus
提示
- 如果使用Mybatis-plus的orm框架,只支持自身的逻辑删除方式
 - 默认逻辑未删除值:0,逻辑已删除值:1, 工作流组件内部通过注解实现
 - 逻辑删除默认开启。 如若关闭, 需高版本比如3.5.3或者以上
 
1.1、逻辑删除值
/**
 * 流程节点对象 flow_node
 *
 * @author warm
 * @since 2023-03-29
 */
@Data
@Accessors(chain = true)
@TableName("flow_node")
public class FlowNode implements Node {
    /**
     * 删除标记
     */
    @TableLogic(value = "0", delval = "1")
    private String delFlag;
}1.2、关闭逻辑删除方案
/**
 * 关闭逻辑删除,需高版本比如3.5.3或者以上
 *
 * @author warm
 */
@Component
public class PlusPostInitTableInfoHandler implements PostInitTableInfoHandler {
    List<String> tableNames = Arrays.asList("flow_definition", "flow_node", "flow_skip", "flow_instance", "flow_task"
            , "flow_his_task", "flow_user");
    @Override
    public void postTableInfo(TableInfo tableInfo, Configuration configuration) {
        String tableName = tableInfo.getTableName();
        if (tableNames.contains(tableName)) {
            Class<?> clazz = tableInfo.getClass();
            Field[] fields = clazz.getDeclaredFields();
            try {
                for (Field field : fields) {
                    if ("withLogicDelete".equals(field.getName())) {
                        field.setAccessible(true);
                        // 关闭逻辑删除
                        field.set(tableInfo, false);
                    }
                }
            } catch (IllegalAccessException e) {
                throw new FlowException("反射设置对象值异常");
            }
        }
    }
}2、通用逻辑删除
# warm-flow工作流配置
warm-flow:
  # 是否开启逻辑删除(orm框架本身不支持逻辑删除,可通过这种方式开启,比如jpa)
  logic_delete: true
  # 逻辑删除字段值(开启后默认为2)
  logic_delete_value: 2
  # 逻辑未删除字段(开启后默认为0)
  logic_not_delete_value: 0

