Browse Source

Merge pull request #4189 from nieqiurong/20211227143327

存在逻辑删除且含有填充字段自动转换实体删除
miemieYaho 3 years ago
parent
commit
ec1012980d

+ 31 - 7
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/service/impl/ServiceImpl.java

@@ -253,15 +253,39 @@ public class ServiceImpl<M extends BaseMapper<T>, T> implements IService<T> {
         return executeBatch(list, DEFAULT_BATCH_SIZE, consumer);
     }
 
+    @Override
+    public boolean removeById(Serializable id) {
+        TableInfo tableInfo = TableInfoHelper.getTableInfo(getEntityClass());
+        if (tableInfo.isWithLogicDelete() && tableInfo.isWithUpdateFill()) {
+            return removeById(id, true);
+        }
+        return SqlHelper.retBool(getBaseMapper().deleteById(id));
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean removeByIds(Collection<?> list) {
+        if (CollectionUtils.isEmpty(list)) {
+            return false;
+        }
+        TableInfo tableInfo = TableInfoHelper.getTableInfo(getEntityClass());
+        if (tableInfo.isWithLogicDelete() && tableInfo.isWithUpdateFill()) {
+            return removeBatchByIds(list, true);
+        }
+        return SqlHelper.retBool(getBaseMapper().deleteBatchIds(list));
+    }
+
     @Override
     public boolean removeById(Serializable id, boolean useFill) {
-        if (useFill && !entityClass.isAssignableFrom(id.getClass())) {
-            TableInfo tableInfo = TableInfoHelper.getTableInfo(entityClass);
-            T instance = tableInfo.newInstance();
-            tableInfo.setPropertyValue(instance, tableInfo.getKeyProperty(), id);
-            return removeById(instance);
+        TableInfo tableInfo = TableInfoHelper.getTableInfo(entityClass);
+        if (useFill && tableInfo.isWithLogicDelete()) {
+            if (!entityClass.isAssignableFrom(id.getClass())) {
+                T instance = tableInfo.newInstance();
+                tableInfo.setPropertyValue(instance, tableInfo.getKeyProperty(), id);
+                return removeById(instance);
+            }
         }
-        return removeById(id);
+        return SqlHelper.retBool(getBaseMapper().deleteById(id));
     }
 
     @Override
@@ -270,7 +294,7 @@ public class ServiceImpl<M extends BaseMapper<T>, T> implements IService<T> {
         String sqlStatement = getSqlStatement(SqlMethod.DELETE_BY_ID);
         TableInfo tableInfo = TableInfoHelper.getTableInfo(entityClass);
         return executeBatch(list, batchSize, (sqlSession, e) -> {
-            if (useFill) {
+            if (useFill && tableInfo.isWithLogicDelete()) {
                 if (entityClass.isAssignableFrom(e.getClass())) {
                     sqlSession.update(sqlStatement, e);
                 } else {

+ 7 - 7
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/H2UserTest.java

@@ -536,15 +536,15 @@ class H2UserTest extends BaseTest {
     void testRemove() {
         //不报错即可,无需关注返回值
         H2User h2User = new H2User(12L, "test");
-        userService.removeById((short) 100);
-        userService.removeById(100.00);
-        userService.removeById((float) 100);
-        userService.removeById(100);
+//        userService.removeById((short) 100);
+//        userService.removeById(100.00);
+//        userService.removeById((float) 100);
+//        userService.removeById(100);
         userService.removeById(100000L);
-        userService.removeById(new BigDecimal("100"));
-        userService.removeById("100000");
+//        userService.removeById(new BigDecimal("100"));
+//        userService.removeById("100000");
         userService.removeById(h2User);
-        userService.removeByIds(Arrays.asList((short) 100, 100, 100.00, (float) 100, 10000L, new BigDecimal("100"), h2User));
+        userService.removeByIds(Arrays.asList(10000L, h2User));
     }
 
     @Test