Skip to content

Commit

Permalink
调整删除条件.
Browse files Browse the repository at this point in the history
  • Loading branch information
nieqiurong committed Feb 2, 2025
1 parent 4316e9e commit 77ccb93
Show file tree
Hide file tree
Showing 8 changed files with 183 additions and 44 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,8 @@ public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> mode
.collect(toList());
if (CollectionUtils.isNotEmpty(fieldInfos)) {
String sqlSet = "SET " + SqlScriptUtils.convertIf(fieldInfos.stream()
.map(i -> i.getSqlSet(EMPTY)).collect(joining(EMPTY)), "[email protected]@isSimpleType(_parameter.getClass())", true)
.map(i -> i.getSqlSet(EMPTY)).collect(joining(EMPTY)),
"@org.apache.ibatis.reflection.SystemMetaObject@forObject(_parameter).findProperty('" + tableInfo.getKeyProperty() + "', false) != null", true)
+ tableInfo.getLogicDeleteSql(false, false);
sql = String.format(sqlMethod.getSql(), tableInfo.getTableName(), sqlSet, tableInfo.getKeyColumn(),
tableInfo.getKeyProperty(), tableInfo.getLogicDeleteSql(true, true));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,16 +62,19 @@ public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> mode
return addUpdateMappedStatement(mapperClass, modelClass, methodName, sqlSource);
} else {
sqlMethod = SqlMethod.DELETE_BY_IDS;
sql = String.format(sqlMethod.getSql(), tableInfo.getTableName(), tableInfo.getKeyColumn(),
SqlScriptUtils.convertForeach(
SqlScriptUtils.convertChoose("@org.apache.ibatis.type.SimpleTypeRegistry@isSimpleType(item.getClass())",
"#{item}", "#{item." + tableInfo.getKeyProperty() + "}"),
COLL, null, "item", COMMA));
sql = String.format(sqlMethod.getSql(), tableInfo.getTableName(), tableInfo.getKeyColumn(), getConvertForeachScript(tableInfo));
SqlSource sqlSource = super.createSqlSource(configuration, sql, Object.class);
return this.addDeleteMappedStatement(mapperClass, methodName, sqlSource);
}
}

protected String getConvertForeachScript(TableInfo tableInfo) {
return SqlScriptUtils.convertForeach(
SqlScriptUtils.convertChoose("item!=null and @org.apache.ibatis.reflection.SystemMetaObject@forObject(item).findProperty('" + tableInfo.getKeyProperty() + "', false) != null",
"#{item." + tableInfo.getKeyProperty() + "}", "#{item}"),
COLL, null, "item", COMMA);
}

/**
* @param tableInfo 表信息
* @return 逻辑删除脚本
Expand All @@ -89,12 +92,7 @@ public String logicDeleteScript(TableInfo tableInfo, SqlMethod sqlMethod) {
}
sqlSet += StringPool.EMPTY + tableInfo.getLogicDeleteSql(false, false);
return String.format(sqlMethod.getSql(), tableInfo.getTableName(),
sqlSet, tableInfo.getKeyColumn(), SqlScriptUtils.convertForeach(
//TODO 待优化,看是否改成判断只使用实体(顺便考虑下子类)??
SqlScriptUtils.convertChoose("@org.apache.ibatis.type.SimpleTypeRegistry@isSimpleType(item.getClass()) or (mpFillEt!=null and item.getClass() != mpFillEt.getClass())",
"#{item}", "#{item." + tableInfo.getKeyProperty() + "}"),
COLL, null, "item", COMMA),
tableInfo.getLogicDeleteSql(true, true));
sqlSet, tableInfo.getKeyColumn(), getConvertForeachScript(tableInfo), tableInfo.getLogicDeleteSql(true, true));
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.baomidou.mybatisplus.test.uuid;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class DeleteByIdDto<T> implements Serializable {

private T id;

}
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,4 @@ public class UUIDEntity {
private UUID id;

private String name;

@TableField(fill = FieldFill.UPDATE)
private String deleteBy;

@TableField(fill = FieldFill.UPDATE)
@TableLogic(delval = "true", value = "false")
private Boolean deleted;

}
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
package com.baomidou.mybatisplus.test.uuid;

import com.baomidou.mybatisplus.core.config.GlobalConfig;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.baomidou.mybatisplus.test.BaseDbTest;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.session.Configuration;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.function.Consumer;

Expand All @@ -21,7 +19,6 @@ void test() {
var uuidEntity = new UUIDEntity();
uuidEntity.setId(UUID.randomUUID());
uuidEntity.setName("test1");
uuidEntity.setDeleted(false);
Assertions.assertEquals(1, m.insert(uuidEntity));
Assertions.assertNotNull(m.selectById(uuidEntity.getId()));
Assertions.assertEquals(1, m.deleteById(uuidEntity));
Expand All @@ -31,7 +28,6 @@ void test() {
var uuidEntity = new UUIDEntity();
uuidEntity.setId(UUID.randomUUID());
uuidEntity.setName("test2");
uuidEntity.setDeleted(false);
Assertions.assertEquals(1, m.insert(uuidEntity));
Assertions.assertEquals(1, m.deleteByIds(List.of(uuidEntity.getId())));
});
Expand All @@ -40,10 +36,25 @@ void test() {
var uuidEntity = new UUIDEntity();
uuidEntity.setId(UUID.randomUUID());
uuidEntity.setName("test3");
uuidEntity.setDeleted(false);
Assertions.assertEquals(1, m.insert(uuidEntity));
Assertions.assertEquals(1, m.deleteByIds(List.of(uuidEntity)));
});

doTest(m -> Assertions.assertDoesNotThrow(()-> m.deleteByIds(
List.of(
UUID.randomUUID().toString(),
UUID.randomUUID(), 123, 321L,
Map.of("id", UUID.randomUUID()),
Map.of("id", UUID.randomUUID().toString()),
new DeleteByIdDto<>(UUID.randomUUID()),
new DeleteByIdDto<>(UUID.randomUUID().toString())
))));

doTest(m -> Assertions.assertDoesNotThrow(()-> m.deleteById(UUID.randomUUID())));
doTest(m -> Assertions.assertDoesNotThrow(()-> m.deleteById(UUID.randomUUID().toString())));
doTest(m -> Assertions.assertDoesNotThrow(()-> m.deleteById(new UUIDEntity(){})));
doTest(m -> Assertions.assertDoesNotThrow(()-> m.deleteById(new DeleteByIdDto<>(UUID.randomUUID()))));
doTest(m -> Assertions.assertDoesNotThrow(()-> m.deleteById(new DeleteByIdDto<>(UUID.randomUUID().toString()))));
}


Expand All @@ -54,24 +65,9 @@ protected Consumer<Configuration> consumer() {
};
}

@Override
protected GlobalConfig globalConfig() {
return super.globalConfig().setMetaObjectHandler(new MetaObjectHandler() {
@Override
public void insertFill(MetaObject metaObject) {

}

@Override
public void updateFill(MetaObject metaObject) {
metaObject.setValue("deleteBy", "baomidou");
}
});
}

@Override
protected String tableDataSql() {
return "insert into entity values('0824eb71-e124-5ba1-56b9-87185d91f309','test',null, false)";
return "insert into entity values('0824eb71-e124-5ba1-56b9-87185d91f309','test')";
}

@Override
Expand All @@ -80,8 +76,6 @@ protected List<String> tableSql() {
"CREATE TABLE IF NOT EXISTS entity (\n" +
"id VARCHAR(50) NOT NULL,\n" +
"name VARCHAR(30) NULL DEFAULT NULL,\n" +
"delete_by VARCHAR(30) NULL DEFAULT NULL," +
"deleted BOOLEAN NOT NULL DEFAULT false," +
"PRIMARY KEY (id)" +
")");
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.baomidou.mybatisplus.test.uuid;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;

import java.util.UUID;

@Data
@TableName("entity")
public class UUIDLogicEntity {

@TableId(value = "id",type = IdType.INPUT)
private UUID id;

private String name;

@TableField(fill = FieldFill.UPDATE)
private String deleteBy;

@TableField(fill = FieldFill.UPDATE)
@TableLogic(delval = "true", value = "false")
private Boolean deleted;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.baomidou.mybatisplus.test.uuid;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;

public interface UUIDLogicEntityMapper extends BaseMapper<UUIDLogicEntity> {

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
package com.baomidou.mybatisplus.test.uuid;

import com.baomidou.mybatisplus.core.config.GlobalConfig;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.baomidou.mybatisplus.test.BaseDbTest;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.session.Configuration;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.function.Consumer;

public class UUIDLogicEntityTest extends BaseDbTest<UUIDLogicEntityMapper> {

@Test
void test() {
doTest(m -> {
var uuidEntity = new UUIDLogicEntity();
uuidEntity.setId(UUID.randomUUID());
uuidEntity.setName("test1");
uuidEntity.setDeleted(false);
Assertions.assertEquals(1, m.insert(uuidEntity));
Assertions.assertNotNull(m.selectById(uuidEntity.getId()));
Assertions.assertEquals(1, m.deleteById(uuidEntity));
});

doTest(m -> {
var uuidEntity = new UUIDLogicEntity();
uuidEntity.setId(UUID.randomUUID());
uuidEntity.setName("test2");
uuidEntity.setDeleted(false);
Assertions.assertEquals(1, m.insert(uuidEntity));
Assertions.assertEquals(1, m.deleteByIds(List.of(uuidEntity.getId())));
});

doTest(m -> {
var uuidEntity = new UUIDLogicEntity();
uuidEntity.setId(UUID.randomUUID());
uuidEntity.setName("test3");
uuidEntity.setDeleted(false);
Assertions.assertEquals(1, m.insert(uuidEntity));
Assertions.assertEquals(1, m.deleteByIds(List.of(uuidEntity)));
});


doTest(m -> Assertions.assertDoesNotThrow(()-> m.deleteByIds(
List.of(
UUID.randomUUID().toString(),
UUID.randomUUID(), 123, 321L,
Map.of("id", UUID.randomUUID()),
Map.of("id", UUID.randomUUID().toString()),
new DeleteByIdDto<>(UUID.randomUUID()),
new DeleteByIdDto<>(UUID.randomUUID().toString())
))));

doTest(m -> Assertions.assertDoesNotThrow(()-> m.deleteById(UUID.randomUUID())));
doTest(m -> Assertions.assertDoesNotThrow(()-> m.deleteById(new UUIDLogicEntity(){})));
// TODO 下面三种类型无法转为UUID,看是否增加一个类型转换器让用户能注册处理自己的类型转换
// doTest(m -> Assertions.assertDoesNotThrow(()-> m.deleteById(UUID.randomUUID().toString())));
// doTest(m -> Assertions.assertDoesNotThrow(()-> m.deleteById(new DeleteByIdDto<>(UUID.randomUUID()))));
// doTest(m -> Assertions.assertDoesNotThrow(()-> m.deleteById(new DeleteByIdDto<>(UUID.randomUUID().toString()))));
}


@Override
protected Consumer<Configuration> consumer() {
return configuration -> {
configuration.getTypeHandlerRegistry().register(UUIDTypeHandler.class);
};
}

@Override
protected GlobalConfig globalConfig() {
return super.globalConfig().setMetaObjectHandler(new MetaObjectHandler() {
@Override
public void insertFill(MetaObject metaObject) {

}

@Override
public void updateFill(MetaObject metaObject) {
metaObject.setValue("deleteBy", "baomidou");
}
});
}

@Override
protected String tableDataSql() {
return "insert into entity values('0824eb71-e124-5ba1-56b9-87185d91f309','test',null, false)";
}

@Override
protected List<String> tableSql() {
return Arrays.asList("drop table if exists entity",
"CREATE TABLE IF NOT EXISTS entity (\n" +
"id VARCHAR(50) NOT NULL,\n" +
"name VARCHAR(30) NULL DEFAULT NULL,\n" +
"delete_by VARCHAR(30) NULL DEFAULT NULL," +
"deleted BOOLEAN NOT NULL DEFAULT false," +
"PRIMARY KEY (id)" +
")");
}
}

0 comments on commit 77ccb93

Please sign in to comment.