Mybatis-Plus 使用自定义注入器后,查询条件中不再添加逻辑删除字段限定条件

 例如项目中加入如下注入器代码后,查询条件中不再添加逻辑删除字段限定条件

/**
 * 自定义Sql注入
 *
 * @author nieqiurong 2018/8/11 20:23.
 */
@Component
public class MySqlInjector extends DefaultSqlInjector {

    @Override
    public List getMethodList(Class mapperClass) {
        List methodList = super.getMethodList(mapperClass);
        //增加自定义方法
        methodList.add(new DeleteAll());
        methodList.add(new FindOne());
        /**
         * 以下 3 个为内置选装件
         * 头 2 个支持字段筛选函数
         */
        // 例: 不要指定了 update 填充的字段
        methodList.add(new InsertBatchSomeColumn(i -> i.getFieldFill() != FieldFill.UPDATE));
        methodList.add(new AlwaysUpdateSomeColumnById());
        methodList.add(new LogicDeleteByIdWithFill());
        return methodList;
    }
}

配置的逻辑删除字段:

@Data
public class BaseEntity implements Serializable {
    /**
     * 删除标记 0:未删除 1:已删除
     */
    @ApiModelProperty(value="删除标记 0:未删除 1:已删除")
    @TableLogic(value = Constant.DELETE_STATUS_UNDELETED, delval = Constant.DELETE_STATUS_DELETED)
    @TableField(select = false)
    private String deleteStatus;
    /**
     * 创建时间
     */
    @ApiModelProperty(value="创建时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    /**
     * 更新时间
     */
    @ApiModelProperty(value="更新时间")
    @TableField(fill = FieldFill.UPDATE)
    private LocalDateTime updateTime;
}

打印的查询语句中,没有自动加上delete_status = '0'

Mybatis-Plus 使用自定义注入器后,查询条件中不再添加逻辑删除字段限定条件_第1张图片

原因是注入器只能存在一个,使用了DefaultSqlInjector,则逻辑删除注入器LogicSqlInjector就不起作用。解决方法是可以使自定义注入器继承自LogicSqlInjector,就既能使用逻辑删除又能加入自定义方法了

@Component
public class MySqlInjector extends LogicSqlInjector

 改造后再运行,就又自动加上delete_status = '0'条件了

Mybatis-Plus 使用自定义注入器后,查询条件中不再添加逻辑删除字段限定条件_第2张图片

你可能感兴趣的:(Mybatis-Plus,Mybatis-Plus,逻辑删除)