注入方法deleteBatchIds重命名deleteByIds.

This commit is contained in:
nieqiurong 2024-06-10 22:37:04 +08:00
parent 3d7faeef0c
commit 566cad8522
7 changed files with 125 additions and 77 deletions

View File

@ -20,6 +20,7 @@
- feat: 修改AES密钥随机性生成
- feat: UpdateWrapper增加checkSqlInjection方法
- feat: 调整DDL脚本自动装配逻辑(当无实现时或无mybatis-plus-extension模块时不注入DDL运行bean)
- feat: 注入方法deleteBatchIds重命名deleteByIds
- feat: SpringBoot升级至2.7.18和3.2.6
- feat: 升级kotlin至1.9.24
- feat: 升级lombok至1.18.32

View File

@ -35,7 +35,15 @@ public enum SqlMethod {
@Deprecated
DELETE_BY_MAP("deleteByMap", "根据columnMap 条件删除记录", "<script>\nDELETE FROM %s %s\n</script>"),
DELETE("delete", "根据 entity 条件删除记录", "<script>\nDELETE FROM %s %s %s\n</script>"),
/**
* @deprecated 3.5.7 {@link #DELETE_BY_IDS}
*/
@Deprecated
DELETE_BATCH_BY_IDS("deleteBatchIds", "根据ID集合批量删除数据", "<script>\nDELETE FROM %s WHERE %s IN (%s)\n</script>"),
/**
* @since 3.5.7
*/
DELETE_BY_IDS("deleteByIds", "根据ID集合批量删除数据", "<script>\nDELETE FROM %s WHERE %s IN (%s)\n</script>"),
/**
* 逻辑删除
@ -43,7 +51,15 @@ public enum SqlMethod {
LOGIC_DELETE_BY_ID("deleteById", "根据ID 逻辑删除一条数据", "<script>\nUPDATE %s %s WHERE %s=#{%s} %s\n</script>"),
LOGIC_DELETE_BY_MAP("deleteByMap", "根据columnMap 条件逻辑删除记录", "<script>\nUPDATE %s %s %s\n</script>"),
LOGIC_DELETE("delete", "根据 entity 条件逻辑删除记录", "<script>\nUPDATE %s %s %s %s\n</script>"),
/**
* @deprecated 3.5.7 {@link #LOGIC_DELETE_BY_IDS}
*/
@Deprecated
LOGIC_DELETE_BATCH_BY_IDS("deleteBatchIds", "根据ID集合批量逻辑删除数据", "<script>\nUPDATE %s %s WHERE %s IN (%s) %s\n</script>"),
/**
* @since 3.5.7
*/
LOGIC_DELETE_BY_IDS("deleteByIds", "根据ID集合批量逻辑删除数据", "<script>\nUPDATE %s %s WHERE %s IN (%s) %s\n</script>"),
/**
* 修改

View File

@ -48,7 +48,7 @@ public class DefaultSqlInjector extends AbstractSqlInjector {
.add(new SelectList());
if (tableInfo.havePK()) {
builder.add(new DeleteById())
.add(new DeleteBatchByIds())
.add(new DeleteByIds())
.add(new UpdateById())
.add(new SelectById())
.add(new SelectBatchByIds());

View File

@ -15,84 +15,14 @@
*/
package com.baomidou.mybatisplus.core.injector.methods;
import com.baomidou.mybatisplus.core.enums.SqlMethod;
import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
import com.baomidou.mybatisplus.core.metadata.TableInfo;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.core.toolkit.sql.SqlScriptUtils;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.SqlSource;
import java.util.List;
import static java.util.stream.Collectors.joining;
import static java.util.stream.Collectors.toList;
/**
* 根据 ID 集合删除
*
* @author hubin
* @since 2018-04-06
* @deprecated 3.5.7 {@link DeleteByIds}
*/
public class DeleteBatchByIds extends AbstractMethod {
public DeleteBatchByIds() {
this(SqlMethod.DELETE_BATCH_BY_IDS.getMethod());
}
/**
* @param name 方法名
* @since 3.5.0
*/
public DeleteBatchByIds(String name) {
super(name);
}
@Override
public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
String sql;
SqlMethod sqlMethod = SqlMethod.LOGIC_DELETE_BATCH_BY_IDS;
if (tableInfo.isWithLogicDelete()) {
sql = logicDeleteScript(tableInfo, sqlMethod);
SqlSource sqlSource = super.createSqlSource(configuration, sql, Object.class);
return addUpdateMappedStatement(mapperClass, modelClass, methodName, sqlSource);
} else {
sqlMethod = SqlMethod.DELETE_BATCH_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));
SqlSource sqlSource = super.createSqlSource(configuration, sql, Object.class);
return this.addDeleteMappedStatement(mapperClass, methodName, sqlSource);
}
}
/**
* @param tableInfo 表信息
* @return 逻辑删除脚本
* @since 3.5.0
*/
public String logicDeleteScript(TableInfo tableInfo, SqlMethod sqlMethod) {
List<TableFieldInfo> fieldInfos = tableInfo.getFieldList().stream()
.filter(TableFieldInfo::isWithUpdateFill)
.filter(f -> !f.isLogicDelete())
.collect(toList());
String sqlSet = "SET ";
if (CollectionUtils.isNotEmpty(fieldInfos)) {
sqlSet += SqlScriptUtils.convertIf(fieldInfos.stream()
.map(i -> i.getSqlSet(Constants.ENTITY + StringPool.DOT)).collect(joining(EMPTY)), String.format("%s != null", Constants.ENTITY), true);
}
sqlSet += StringPool.EMPTY + tableInfo.getLogicDeleteSql(false, false);
return String.format(sqlMethod.getSql(), tableInfo.getTableName(),
sqlSet, tableInfo.getKeyColumn(), SqlScriptUtils.convertForeach(
SqlScriptUtils.convertChoose("@org.apache.ibatis.type.SimpleTypeRegistry@isSimpleType(item.getClass())",
"#{item}", "#{item." + tableInfo.getKeyProperty() + "}"),
COLL, null, "item", COMMA),
tableInfo.getLogicDeleteSql(true, true));
}
@Deprecated
public class DeleteBatchByIds extends DeleteByIds {
}

View File

@ -0,0 +1,99 @@
/*
* Copyright (c) 2011-2024, baomidou (jobob@qq.com).
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.baomidou.mybatisplus.core.injector.methods;
import com.baomidou.mybatisplus.core.enums.SqlMethod;
import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
import com.baomidou.mybatisplus.core.metadata.TableInfo;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.core.toolkit.sql.SqlScriptUtils;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.SqlSource;
import java.util.List;
import static java.util.stream.Collectors.joining;
import static java.util.stream.Collectors.toList;
/**
* 根据 ID 集合删除
*
* @author nieqiurong
* @since 3.5.7
*/
public class DeleteByIds extends AbstractMethod {
public DeleteByIds() {
this(SqlMethod.DELETE_BY_IDS.getMethod());
}
/**
* @param name 方法名
* @since 3.5.0
*/
public DeleteByIds(String name) {
super(name);
}
@Override
public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
String sql;
SqlMethod sqlMethod = SqlMethod.LOGIC_DELETE_BY_IDS;
if (tableInfo.isWithLogicDelete()) {
sql = logicDeleteScript(tableInfo, sqlMethod);
SqlSource sqlSource = super.createSqlSource(configuration, sql, Object.class);
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));
SqlSource sqlSource = super.createSqlSource(configuration, sql, Object.class);
return this.addDeleteMappedStatement(mapperClass, methodName, sqlSource);
}
}
/**
* @param tableInfo 表信息
* @return 逻辑删除脚本
* @since 3.5.0
*/
public String logicDeleteScript(TableInfo tableInfo, SqlMethod sqlMethod) {
List<TableFieldInfo> fieldInfos = tableInfo.getFieldList().stream()
.filter(TableFieldInfo::isWithUpdateFill)
.filter(f -> !f.isLogicDelete())
.collect(toList());
String sqlSet = "SET ";
if (CollectionUtils.isNotEmpty(fieldInfos)) {
sqlSet += SqlScriptUtils.convertIf(fieldInfos.stream()
.map(i -> i.getSqlSet(Constants.ENTITY + StringPool.DOT)).collect(joining(EMPTY)), String.format("%s != null", Constants.ENTITY), true);
}
sqlSet += StringPool.EMPTY + tableInfo.getLogicDeleteSql(false, false);
return String.format(sqlMethod.getSql(), tableInfo.getTableName(),
sqlSet, tableInfo.getKeyColumn(), SqlScriptUtils.convertForeach(
SqlScriptUtils.convertChoose("@org.apache.ibatis.type.SimpleTypeRegistry@isSimpleType(item.getClass())",
"#{item}", "#{item." + tableInfo.getKeyProperty() + "}"),
COLL, null, "item", COMMA),
tableInfo.getLogicDeleteSql(true, true));
}
}

View File

@ -213,7 +213,7 @@ public interface BaseMapper<T> extends Mapper<T> {
params.put(Constants.ENTITY, tableInfo.newInstance());
}
params.put(Constants.COLL, collections);
return sqlSession.delete(mapperInterface.getName() + StringPool.DOT + SqlMethod.DELETE_BATCH_BY_IDS.getMethod(), params);
return sqlSession.delete(mapperInterface.getName() + StringPool.DOT + SqlMethod.DELETE_BY_IDS.getMethod(), params);
}
/**

View File

@ -16,7 +16,7 @@
package com.baomidou.mybatisplus.extension.injector.methods;
import com.baomidou.mybatisplus.core.enums.SqlMethod;
import com.baomidou.mybatisplus.core.injector.methods.DeleteBatchByIds;
import com.baomidou.mybatisplus.core.injector.methods.DeleteByIds;
import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
import com.baomidou.mybatisplus.core.metadata.TableInfo;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
@ -46,8 +46,10 @@ import static java.util.stream.Collectors.toList;
*
* @author nieqiurong
* @since 3.5.0
* @deprecated 3.5.7 {@link DeleteByIds}
*/
public class LogicDeleteBatchByIds extends DeleteBatchByIds {
@Deprecated
public class LogicDeleteBatchByIds extends DeleteByIds {
public LogicDeleteBatchByIds() {
super();