springboot mybaits-plus Sql 注入器 自定义逻辑删除

1 写一个类继续 AbstractLogicMethod

public class LogicDeleteByWrapper extends AbstractLogicMethod {

    @Override
    public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
        String sql;
        MySqlMethod sqlMethod = MySqlMethod.LOGIC_DELETE_BY_WRAPPER;
        sql = String.format(sqlMethod.getSql(), tableInfo.getTableName(), sqlLogicSet(),
                sqlWhereEntityWrapper(tableInfo));
        SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass);
        return addUpdateMappedStatement(mapperClass, modelClass, sqlMethod.getMethod(), sqlSource);
    }

    public String sqlLogicSet(){

        String sql ="<trim prefix=\"SET\" suffixOverrides=\",\">\n" +
                "<if test=\"et.updateBy != null\">update_by=#{et.updateBy},</if>\n" +
                "<if test=\"et.updateTime != null\">update_time=#{et.updateTime},</if>\n" +
                "is_deleted = 1\n" +
                "</trim> ";
        return sql;
    }
}

写一个类继承baseMapper

    /**
     * 逻辑删除
     * @param entity
     * @param updateWrapper
     * @return
     */
    int logicDeleteByWrapper(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) Wrapper<T> updateWrapper);

写一个枚举类

public enum  MySqlMethod {


    /**
     * 根据参数逻辑删除
     */
    LOGIC_DELETE_BY_WRAPPER("logicDeleteByWrapper", "根据ID 修改数据", "<script>\nUPDATE %s %s %s\n</script>"),

    /**
     * 根据id逻辑删除
     */
    LOGIC_DELETE_BY_ID("logicDeleteById", "根据ID 修改数据", "<script>\nUPDATE %s %s WHERE %s=#{%s}\n</script>");

    private final String method;
    private final String desc;
    private final String sql;

    MySqlMethod(String method, String desc, String sql) {
        this.method = method;
        this.desc = desc;
        this.sql = sql;
    }

    public String getMethod() {
        return method;
    }

    public String getDesc() {
        return desc;
    }

    public String getSql() {
        return sql;
    }
}

最后一步就是注入到bean

public class MyLogicSqlInjector extends AbstractSqlInjector {


    @Override
    public List<AbstractMethod> getMethodList() {
        return Stream.of(         
                new LogicDeleteByWrapper()
        ).collect(Collectors.toList());
    }


    @Override
    public void injectSqlRunner(Configuration configuration) {
        new SqlRunnerInjector().inject(configuration);
    }
}
@Configuration
@MapperScan("com.xxx.xxx.*.dao")
public class MybatisPlusConfig {

    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }


    @Bean
    public ISqlInjector sqlInjector() {
        return new MyLogicSqlInjector();
    }

    /**
     * SQL执行效率插件
     */
    @Bean
    @Profile({"dev","test"})// 设置 dev test 环境开启
    public PerformanceInterceptor performanceInterceptor() {
        return new PerformanceInterceptor();
    }
}

转载 http://www.51csdn.cn/article/140.html 

猜你喜欢

转载自blog.csdn.net/qq_43599835/article/details/83714425