玖叶教程网

前端编程开发入门

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

最近项目遇到一个问题就是使用mybaits-plus,虽然mybaits-plus,可以配置逻辑删除,但是不能既有物理删除又有逻辑删除,所以只有自己写了。

我用的是3.1.1版本

第一步 写一个类继续 AbstractMethod 3.1.1之前版本是继承 AbstractLogicMethod

public class LogicDeleteByWrapper extends AbstractMethod {
 @Override
 public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
 BaseSqlMethod sqlMethod = BaseSqlMethod.LOGIC_DELETE_BY_WRAPPER;
 String sql = String.format(sqlMethod.getSql(), tableInfo.getTableName(), sqlLogicSet(), sqlWhereEntityWrapper(true, tableInfo));
 SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass);
 return addUpdateMappedStatement(mapperClass, modelClass, sqlMethod.getMethod(), sqlSource);
 }
 public String sqlLogicSet() {
 return "<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>\nis_deleted = 1\n</trim> ";
 }

第二步 写一个BaseDao 继承BaseMapper

public interface BaseDao<T> extends BaseMapper<T> {
 /**
 * 逻辑删除
 * @param entity
 * @param updateWrapper
 * @return
 */
 int logicDeleteByWrapper(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) Wrapper<T> updateWrapper);
}

第三步 写一个枚举类

public enum BaseSqlMethod {
 /**
 * 根据参数逻辑删除
 */
 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;
 BaseSqlMethod(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;
 }

第四步 加入到SqlInjector

public class BaseLogicSqlInjector extends AbstractSqlInjector {
 @Override
 public List<AbstractMethod> getMethodList() {
 return Stream.of(
 new Insert(),
 new Delete(),
 new DeleteByMap(),
 new DeleteById(),
 new DeleteBatchByIds(),
 new Update(),
 new UpdateById(),
 new SelectById(),
 new SelectBatchByIds(),
 new SelectByMap(),
 new SelectOne(),
 new SelectCount(),
 new SelectMaps(),
 new SelectMapsPage(),
 new SelectObjs(),
 new SelectList(),
 new SelectPage(),
 new LogicDeleteByWrapper()
 ).collect(Collectors.toList());
 }
}

最后一步就是注入Bean

@Configuration
@MapperScan("com.xxx.*.*.dao")
public class MybatisPlusConfig {
 @Bean
 public PaginationInterceptor paginationInterceptor() {
 return new PaginationInterceptor();
 }
 @Bean
 public ISqlInjector sqlInjector() {
 return new BaseLogicSqlInjector();
 }
 /**
 * SQL执行效率插件
 */
 @Bean
 @Profile({"dev","test"})// 设置 dev test 环境开启
 public PerformanceInterceptor performanceInterceptor() {
 return new PerformanceInterceptor();
 }
}

好了这样就可以使用了,这个自定义注入器 mybaits-plus官网有介绍,在此不做解释。

文章若有不对之处,私信给我一起探讨。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言