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

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

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();
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值