目标:

mybatis-plus @TableLogic 逻辑删除 后的数据不能用 mybatis-plus的方法恢复,又不想写sql

所以用 mybatis-plus 的自定义方法解决这个问题

直接上代码

1.继承 AbstractMethod 拼凑sql


import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
import com.baomidou.mybatisplus.core.metadata.TableInfo;
import org.apache.ibatis.executor.keygen.NoKeyGenerator;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.SqlSource;/*** <p>* </p>** @author L* @date 2019/6/14*/
public class RecoverBatch extends AbstractMethod {@Overridepublic MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {final String sql = "<script>update %s set %s where %s</script>";final String fieldSql = prepareFieldSql(tableInfo);final String whereSql = prepareWhereSqlForMysqlBatch(tableInfo);final String sqlResult = String.format(sql, tableInfo.getTableName(), fieldSql, whereSql);SqlSource sqlSource = languageDriver.createSqlSource(configuration, sqlResult, modelClass);return this.addInsertMappedStatement(mapperClass, modelClass, "recoverBatch", sqlSource, new NoKeyGenerator(), null, null);}private String prepareFieldSql(TableInfo tableInfo) {final StringBuilder valueSql = new StringBuilder();final TableFieldInfo logicDeleteFieldInfo = tableInfo.getLogicDeleteFieldInfo();final String logicDeleteColum = logicDeleteFieldInfo.getColumn();final String logicNotDeleteValue = logicDeleteFieldInfo.getLogicNotDeleteValue();valueSql.append(logicDeleteColum).append("=").append(logicNotDeleteValue);return valueSql.toString();}private String prepareWhereSqlForMysqlBatch(TableInfo tableInfo) {final StringBuilder whereSql = new StringBuilder();whereSql.append(tableInfo.getKeyColumn()).append(" ").append("in").append(" ");whereSql.append("<foreach collection=\"list\" item=\"item\" index=\"index\" open=\"(\" separator=\",\" close=\")\">");whereSql.append("#{item.").append(tableInfo.getKeyProperty()).append("}");whereSql.append("</foreach>");return whereSql.toString();}
}

2.自定义Mapper

import java.util.List;import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.Param;import com.baomidou.mybatisplus.core.mapper.BaseMapper;/*** @author L* @since 2018-08-13*/
public interface PteromysMapper<T> extends BaseMapper<T> {/*** 批量恢复* @param batchList* @return*/int recoverBatch(@Param("list") List<T> batchList);}

3.方法注册

import java.util.List;import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
import com.baomidou.mybatisplus.core.injector.methods.SelectById;
import com.baomidou.mybatisplus.core.metadata.TableInfo;/*** 自定义 SqlInjector** @author miemie* @since 2018-08-13*/
public class PteromysSqlInjector extends DefaultSqlInjector {/*** 如果只需增加方法,保留MP自带方法* 可以super.getMethodList() 再add* @return*/@Overridepublic List<AbstractMethod> getMethodList(Class<?> mapperClass, TableInfo tableInfo) {List<AbstractMethod> methodList = super.getMethodList(mapperClass, tableInfo);methodList.add(new RecoverBatch());return methodList;}
}

4.使用

业务mapper继承自定义的PteromysMapper,调用 recoverBatch 方法

mybatis-plus @TableLogic 逻辑删除 恢复 自定义方法相关推荐

  1. MyBatis Plus之逻辑删除和分页插件使用

    概要:Mybatis plus 官网链接 :https://mp.baomidou.com/guide/ 一.依赖配置: <?xml version="1.0" encodi ...

  2. MyBatis-Plus 乐观锁 防止超卖、逻辑删除、自动填充、Id自增

    MyBatis-Plus 乐观锁 防止超卖.逻辑删除.自动填充 Day3 前面的简单的讲了一下mybatis-plus的使用 当然有很多不足 我写博客就是想促进大家一起学习 也想让这些内容更简单一些. ...

  3. mybatis-plus逻辑删除数据后依然能够查出该数据

    问题:逻辑删除后的数据依然能够查询的到 我的出错原因: 在pojo类中的@TableLogic注解中加了value属性,导致mybatis-plus生成的sql语句的条件一直是where delete ...

  4. mybatis-plus配置逻辑删除

    在实际操作中,删除操作并不是真实的物理删除,而是逻辑删除,在数据库表中添加一列 deleted 字段表明数据是否被删除. entity 对象中在 deleted 字段添加 @TableLogic // ...

  5. mybatis 乐观锁_MybatisPlus新特性之逻辑删除、乐观锁、自动填充

    MP特性 公共字段的自动填充功能 自动更新全局属性,比如创建的时间修改的时间,这样就不用每执行一次插入更新操作都带上一个set大大节省了很多效率,从而也避免为了因为时间格式的不统一问题. 为了输出日志 ...

  6. @TableLogic注解表示逻辑删除

    @TableLogic注解表示逻辑删除 效果:在字段上加上这个注解再执行BaseMapper的删除方法时,删除方法会变成修改 场景:     1.实体类中属性加上@TableLogic,     @T ...

  7. mybatis 乐观锁和逻辑删除

    本篇介绍easymybatis如配置乐观锁和逻辑删除. 乐观锁 easymybatis提供的乐观锁使用方式跟JPA一样,使用@Version注解来实现.即:数据库增加一个int或long类型字段ver ...

  8. mysql如何逻辑删除_mysql逻辑删除如何恢复

    在项目中,一般会遇到这种情况:逻辑删除以及多关联不删除 逻辑删除(软删除):逻辑删除就是对要被删除的数据打上一个删除标记,通常使用一个is_deleted字段标示行记录是不是被删除(或者使用一个sta ...

  9. Mybatis Plus逻辑删除

    1.首先在实体类中的删除字段添加注解 @TableLogic @TableField(deleteFiled) private String deleteFiled; 2.在配置文件中设置: myba ...

最新文章

  1. 步步为营 .NET 设计模式学习笔记 六、Adapter(适配器模式)
  2. maven导入多模块项目
  3. 打死都要记住!微服务架构的常用设计模式!
  4. Javascript实现导航锚点滚动效果实例
  5. Qt学习笔记之QString
  6. 八、pink老师的学习笔记—— CSS用户界面样式(鼠标样式、轮廓线、防止拖拽文本域)
  7. Facebook田渊栋谈人生挑战与选择
  8. NOI2015 荷马史诗
  9. android ListView 九大重要属性详细分析
  10. 如何下载mysql-java驱动jar包
  11. 中国的码农们,沉睡了20年,该醒醒了
  12. Mcafee(麦咖啡)8.5i 使用设置图解 --服务器
  13. 软件测试培训一般多少钱?
  14. 02【代词】人称代词,指示代词,不定代词?
  15. Air Jordan 33 Performance Review
  16. 2018年以后正确的网站外链建设方法
  17. 几个chatGPT的难题,关于语言转换
  18. arduinouno组装无人机_Arduino UNO四自由度机械臂制作
  19. open3d学习教程1--点云对象PointCloud
  20. 安装驱动程序顺序的学问

热门文章

  1. 深入浅出CChart 每日一课——快乐高四第五课 梦想的天空,锦上添花之客户区自绘篇
  2. python绘制动态心电图_Python-Evoked地形图可视化
  3. 案例 | 信安运维基于 TKE 平台的容器技术实践
  4. linux系统的python能运行dll,python调用window dll和linux so例子
  5. opencv保存图片成视频无法播放、没写成功(指定路径下没有)
  6. Unity基础知识学习五,UGUI优化相关
  7. 【计算机网络】2、TCP:四次挥手与TIME_WAIT、shutdown() 优雅关闭 server、探活、拥塞窗口与 Nagle 算法、端口占用、tcp 的流式协议、可靠性
  8. 【辞职理由】三十八条最好的辞职理由
  9. Redis 未授权访问的原理、危害及复现
  10. python求数列数量积_python中矩阵运算(乘法和数量积)