All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.baomidou.mybatisplus.generator.config.StrategyConfig Maven / Gradle / Ivy

/*
 * Copyright (c) 2011-2023, baomidou ([email protected]).
 *
 * 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.generator.config;

import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.generator.config.builder.*;
import com.baomidou.mybatisplus.generator.config.po.LikeTable;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.io.File;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * 策略配置项
 *
 * @author YangHu, tangguo, hubin
 * @since 2016/8/30
 */
public class StrategyConfig {

    private StrategyConfig() {
    }

    /**
     * 是否大写命名(默认 false)
     */
    private boolean isCapitalMode;

    /**
     * 是否跳过视图(默认 false)
     */
    private boolean skipView;

    /**
     * 过滤表前缀
     * example: addTablePrefix("t_")
     * result: t_simple -> Simple
     */
    private final Set tablePrefix = new HashSet<>();

    /**
     * 过滤表后缀
     * example: addTableSuffix("_0")
     * result: t_simple_0 -> Simple
     */
    private final Set tableSuffix = new HashSet<>();

    /**
     * 过滤字段前缀
     * example: addFieldPrefix("is_")
     * result: is_deleted -> deleted
     */
    private final Set fieldPrefix = new HashSet<>();

    /**
     * 过滤字段后缀
     * example: addFieldSuffix("_flag")
     * result: deleted_flag -> deleted
     */
    private final Set fieldSuffix = new HashSet<>();

    /**
     * 需要包含的表名,允许正则表达式(与exclude二选一配置)
* 当{@link #enableSqlFilter}为true时,正则表达式无效. */ private final Set include = new HashSet<>(); /** * 需要排除的表名,允许正则表达式
* 当{@link #enableSqlFilter}为true时,正则表达式无效. */ private final Set exclude = new HashSet<>(); /** * 启用sql过滤,语法不能支持使用sql过滤表的话,可以考虑关闭此开关. * * @since 3.3.1 */ private boolean enableSqlFilter = true; /** * 启用 schema 默认 false */ private boolean enableSchema; /** * 包含表名 * * @since 3.3.0 */ private LikeTable likeTable; /** * 不包含表名 * * @since 3.3.0 */ private LikeTable notLikeTable; private final Entity.Builder entityBuilder = new Entity.Builder(this); private final Controller.Builder controllerBuilder = new Controller.Builder(this); private final Mapper.Builder mapperBuilder = new Mapper.Builder(this); private final Service.Builder serviceBuilder = new Service.Builder(this); private Entity entity; private Controller controller; private Mapper mapper; private Service service; private IOutputFile outputFile = (path, ot) -> new File(path); /** * 实体配置构建者 * * @return 实体配置构建者 * @since 3.5.0 */ @NotNull public Entity.Builder entityBuilder() { return entityBuilder; } /** * 实体配置 * * @return 实体配置 * @since 3.5.0 */ @NotNull public Entity entity() { if (entity == null) { this.entity = entityBuilder.get(); } return entity; } /** * 控制器配置构建者 * * @return 控制器配置构建者 * @since 3.5.0 */ @NotNull public Controller.Builder controllerBuilder() { return controllerBuilder; } /** * 控制器配置 * * @return 控制器配置 * @since 3.5.0 */ @NotNull public Controller controller() { if (controller == null) { this.controller = controllerBuilder.get(); } return controller; } /** * Mapper配置构建者 * * @return Mapper配置构建者 * @since 3.5.0 */ @NotNull public Mapper.Builder mapperBuilder() { return mapperBuilder; } /** * Mapper配置 * * @return Mapper配置 * @since 3.5.0 */ @NotNull public Mapper mapper() { if (mapper == null) { this.mapper = mapperBuilder.get(); } return mapper; } /** * Service配置构建者 * * @return Service配置构建者 * @since 3.5.0 */ @NotNull public Service.Builder serviceBuilder() { return serviceBuilder; } /** * Service配置 * * @return Service配置 * @since 3.5.0 */ @NotNull public Service service() { if (service == null) { this.service = serviceBuilder.get(); } return service; } /** * 大写命名、字段符合大写字母数字下划线命名 * * @param word 待判断字符串 */ public boolean isCapitalModeNaming(@NotNull String word) { return isCapitalMode && StringUtils.isCapitalMode(word); } /** * 表名称匹配过滤表前缀 * * @param tableName 表名称 * @since 3.3.2 */ public boolean startsWithTablePrefix(@NotNull String tableName) { return this.tablePrefix.stream().anyMatch(tableName::startsWith); } /** * 验证配置项 * * @since 3.5.0 */ public void validate() { boolean isInclude = this.getInclude().size() > 0; boolean isExclude = this.getExclude().size() > 0; if (isInclude && isExclude) { throw new IllegalArgumentException(" 标签中 只能配置一项!"); } if (this.getNotLikeTable() != null && this.getLikeTable() != null) { throw new IllegalArgumentException(" 标签中 只能配置一项!"); } } /** * 包含表名匹配 * * @param tableName 表名 * @return 是否匹配 * @since 3.5.0 */ public boolean matchIncludeTable(@NotNull String tableName) { return matchTable(tableName, this.getInclude()); } /** * 排除表名匹配 * * @param tableName 表名 * @return 是否匹配 * @since 3.5.0 */ public boolean matchExcludeTable(@NotNull String tableName) { return matchTable(tableName, this.getExclude()); } /** * 表名匹配 * * @param tableName 表名 * @param matchTables 匹配集合 * @return 是否匹配 * @since 3.5.0 */ private boolean matchTable(@NotNull String tableName, @NotNull Set matchTables) { return matchTables.stream().anyMatch(t -> tableNameMatches(t, tableName)); } /** * 表名匹配 * * @param matchTableName 匹配表名 * @param dbTableName 数据库表名 * @return 是否匹配 */ private boolean tableNameMatches(@NotNull String matchTableName, @NotNull String dbTableName) { return matchTableName.equalsIgnoreCase(dbTableName) || StringUtils.matches(matchTableName, dbTableName); } public boolean isCapitalMode() { return isCapitalMode; } public boolean isSkipView() { return skipView; } @NotNull public Set getTablePrefix() { return tablePrefix; } @NotNull public Set getTableSuffix() { return tableSuffix; } @NotNull public Set getFieldPrefix() { return fieldPrefix; } @NotNull public Set getFieldSuffix() { return fieldSuffix; } @NotNull public Set getInclude() { return include; } @NotNull public Set getExclude() { return exclude; } public boolean isEnableSqlFilter() { return enableSqlFilter; } public boolean isEnableSchema() { return enableSchema; } @Nullable public LikeTable getLikeTable() { return likeTable; } @Nullable public LikeTable getNotLikeTable() { return notLikeTable; } @Nullable public IOutputFile getOutputFile() { return outputFile; } /** * 策略配置构建者 * * @author nieqiurong 2020/10/11. * @since 3.5.0 */ public static class Builder extends BaseBuilder { private final StrategyConfig strategyConfig; public Builder() { super(new StrategyConfig()); strategyConfig = super.build(); } /** * 开启大写命名 * * @return this * @since 3.5.0 */ public Builder enableCapitalMode() { this.strategyConfig.isCapitalMode = true; return this; } /** * 开启跳过视图 * * @return this * @since 3.5.0 */ public Builder enableSkipView() { this.strategyConfig.skipView = true; return this; } /** * 禁用sql过滤 * * @return this * @since 3.5.0 */ public Builder disableSqlFilter() { this.strategyConfig.enableSqlFilter = false; return this; } /** * 启用 schema * * @return this * @since 3.5.1 */ public Builder enableSchema() { this.strategyConfig.enableSchema = true; return this; } /** * 增加过滤表前缀 * * @param tablePrefix 过滤表前缀 * @return this * @since 3.5.0 */ public Builder addTablePrefix(@NotNull String... tablePrefix) { return addTablePrefix(Arrays.asList(tablePrefix)); } public Builder addTablePrefix(@NotNull List tablePrefixList) { this.strategyConfig.tablePrefix.addAll(tablePrefixList); return this; } /** * 增加过滤表后缀 * * @param tableSuffix 过滤表后缀 * @return this * @since 3.5.1 */ public Builder addTableSuffix(String... tableSuffix) { return addTableSuffix(Arrays.asList(tableSuffix)); } public Builder addTableSuffix(@NotNull List tableSuffixList) { this.strategyConfig.tableSuffix.addAll(tableSuffixList); return this; } /** * 增加过滤字段前缀 * * @param fieldPrefix 过滤字段前缀 * @return this * @since 3.5.0 */ public Builder addFieldPrefix(@NotNull String... fieldPrefix) { return addFieldPrefix(Arrays.asList(fieldPrefix)); } public Builder addFieldPrefix(@NotNull List fieldPrefix) { this.strategyConfig.fieldPrefix.addAll(fieldPrefix); return this; } /** * 增加过滤字段后缀 * * @param fieldSuffix 过滤字段后缀 * @return this * @since 3.5.1 */ public Builder addFieldSuffix(@NotNull String... fieldSuffix) { return addFieldSuffix(Arrays.asList(fieldSuffix)); } public Builder addFieldSuffix(@NotNull List fieldSuffixList) { this.strategyConfig.fieldSuffix.addAll(fieldSuffixList); return this; } /** * 增加包含的表名 * * @param include 包含表 * @return this * @since 3.5.0 */ public Builder addInclude(@NotNull String... include) { this.strategyConfig.include.addAll(Arrays.asList(include)); return this; } public Builder addInclude(@NotNull List includes) { this.strategyConfig.include.addAll(includes); return this; } public Builder addInclude(@NotNull String include) { this.strategyConfig.include.addAll(Arrays.asList(include.split(","))); return this; } /** * 增加排除表 * * @param exclude 排除表 * @return this * @since 3.5.0 */ public Builder addExclude(@NotNull String... exclude) { return addExclude(Arrays.asList(exclude)); } public Builder addExclude(@NotNull List excludeList) { this.strategyConfig.exclude.addAll(excludeList); return this; } /** * 包含表名 * * @return this */ public Builder likeTable(@NotNull LikeTable likeTable) { this.strategyConfig.likeTable = likeTable; return this; } /** * 不包含表名 * * @return this */ public Builder notLikeTable(@NotNull LikeTable notLikeTable) { this.strategyConfig.notLikeTable = notLikeTable; return this; } /** * 输出文件处理 * * @return this */ public Builder outputFile(@NotNull IOutputFile outputFile) { this.strategyConfig.outputFile = outputFile; return this; } @Override @NotNull public StrategyConfig build() { this.strategyConfig.validate(); return strategyConfig; } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy