`
kehui
  • 浏览: 2917 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

mybatis-generator autoDelimitKeywords 无效问题解决办法

阅读更多

不用看其它博客了,看这个就完事了,其它博客一个抄一个,全是错的。有可能是 mybatis-generator 迭代导致的,也有可能是根本自己没试过,就是个错的。 

 

mybatis-generator 怎么用我就不再说了,网上一大堆,现在说说以下这段配置,为什么生成的表,表名两边还是没有 `` 字符包裹。

<property name="javaFileEncoding" value="UTF-8"/>
<property name="autoDelimitKeywords" value="true"/>
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>

 

如果只想知道结果的,我这里可以告诉你们,在 <table> 标签中加一个参数就可以了,先列答案。

 

<table tableName="ABC"
               domainObjectName="ABC"
               enableSelectByPrimaryKey="true"
               enableSelectByExample="true"
               enableUpdateByPrimaryKey="true"
               enableInsert="true"
               enableUpdateByExample="true"
               enableCountByExample="true" delimitIdentifiers="true">
        </table>

 

这样就解决问题了,多设置一个 delimitIdentifiers 参数就行了。只拿结果的到这里就不用看了。

 

 

以下说说为什么。

 

首先我们找一下 beginningDelimiter 和 endingDelimiter 在哪儿使用的。以下是使用位置。

 

org.mybatis.generator.api.FullyQualifiedTable#FullyQualifiedTable

 

这个方法代码如下

 

public FullyQualifiedTable(String introspectedCatalog,
            String introspectedSchema, String introspectedTableName,
            String domainObjectName, String alias,
            boolean ignoreQualifiersAtRuntime, String runtimeCatalog,
            String runtimeSchema, String runtimeTableName,
            boolean delimitIdentifiers, DomainObjectRenamingRule domainObjectRenamingRule,
            Context context) {
        super();
        this.introspectedCatalog = introspectedCatalog;
        this.introspectedSchema = introspectedSchema;
        this.introspectedTableName = introspectedTableName;
        this.ignoreQualifiersAtRuntime = ignoreQualifiersAtRuntime;
        this.runtimeCatalog = runtimeCatalog;
        this.runtimeSchema = runtimeSchema;
        this.runtimeTableName = runtimeTableName;
        this.domainObjectRenamingRule = domainObjectRenamingRule;

        if (stringHasValue(domainObjectName)) {
            int index = domainObjectName.lastIndexOf('.');
            if (index == -1) {
                this.domainObjectName = domainObjectName;
            } else {
                this.domainObjectName = domainObjectName.substring(index + 1);
                this.domainObjectSubPackage = domainObjectName.substring(0, index);
            }
        }

        if (alias == null) {
            this.alias = null;
        } else {
            this.alias = alias.trim();
        }

        beginningDelimiter = delimitIdentifiers ? context
                .getBeginningDelimiter() : ""; //$NON-NLS-1$
        endingDelimiter = delimitIdentifiers ? context.getEndingDelimiter()
                : ""; //$NON-NLS-1$
    }

 

注释我就不贴了,在这个方法最后,说的很清楚,beginningDelimiter 和 endingDelimiter 可以是你设置的值,但是务必要使 delimitIdentifiers = true。那我们继续找一下 delimitIdentifiers 在哪儿设置的。

org.mybatis.generator.internal.db.DatabaseIntrospector#calculateIntrospectedTables

 

在这个地方我们看他代码

 

private List<IntrospectedTable> calculateIntrospectedTables(
            TableConfiguration tc,
            Map<ActualTableName, List<IntrospectedColumn>> columns) {
        boolean delimitIdentifiers = tc.isDelimitIdentifiers()
                || stringContainsSpace(tc.getCatalog())
                || stringContainsSpace(tc.getSchema())
                || stringContainsSpace(tc.getTableName());

        List<IntrospectedTable> answer = new ArrayList<IntrospectedTable>();

        for (Map.Entry<ActualTableName, List<IntrospectedColumn>> entry : columns
                .entrySet()) {
            ActualTableName atn = entry.getKey();
            FullyQualifiedTable table = new FullyQualifiedTable(
                    stringHasValue(tc.getCatalog()) ? atn.getCatalog() : null,
                    stringHasValue(tc.getSchema()) ? atn.getSchema() : null,
                    atn.getTableName(),
                    tc.getDomainObjectName(),
                    tc.getAlias(),
                    isTrue(tc.getProperty(PropertyRegistry.TABLE_IGNORE_QUALIFIERS_AT_RUNTIME)),
                    tc.getProperty(PropertyRegistry.TABLE_RUNTIME_CATALOG),
                    tc.getProperty(PropertyRegistry.TABLE_RUNTIME_SCHEMA),
                    tc.getProperty(PropertyRegistry.TABLE_RUNTIME_TABLE_NAME),
                    delimitIdentifiers,
                    tc.getDomainObjectRenamingRule(),
                    context);

            IntrospectedTable introspectedTable = ObjectFactory
                    .createIntrospectedTable(tc, table, context);

            for (IntrospectedColumn introspectedColumn : entry.getValue()) {
                introspectedTable.addColumn(introspectedColumn);
            }

            calculatePrimaryKey(table, introspectedTable);

            enhanceIntrospectedTable(introspectedTable);

            answer.add(introspectedTable);
        }

        return answer;
    }

 

在这里我们可以看到 delimitIdentifiers 的判断规则。

 

从以上梳理的结果,我们大致可以认为,以下四种情况,可以使 beginningDelimiter 和 endingDelimiter 的设置生效。

1.<table> 标签中设置 delimitIdentifiers 属性。

2.<table> 标签中设置 catalog 属性,并且在前后或者任何位置,有空格。(不要问我为什么,我也不知道。。)

3.<table> 标签中设置 schema 属性,并且在前后或者任何位置,有空格。(不要问我为什么,我也不知道。。)

4.<table> 标签中设置 tableName 属性,并且在前后或者任何位置,有空格。(不要问我为什么,我也不知道。。)

 

以上。

分享到:
评论

相关推荐

    mybatis-generator-config_1_0.dtd

    mybatis-generator-config_1_0.dtd文件存在于mybatis-generator-core-1.3.2.jar包中,路径如下org/mybatis/generator/config/xml/mybatis-generator-config_1_0.dtd 可以设置开发工具的dtd配置,配置...

    mybatis-generator-core-1.3.7-API文档-中文版.zip

    赠送jar包:mybatis-generator-core-1.3.7.jar; 赠送原API文档:mybatis-generator-core-1.3.7-javadoc.jar; 赠送源代码:mybatis-generator-core-1.3.7-sources.jar; 赠送Maven依赖信息文件:mybatis-generator-...

    mybatis-plus最新代码生成器项目源码 :mybatis-plus-generator.zip

    mybatis-plus最新代码生成器项目源码 :mybatis-plus-generator.zip mybatis-plus最新代码生成器项目源码 :mybatis-plus-generator.zip mybatis-plus最新代码生成器项目源码 :mybatis-plus-generator.zip ...

    mybatis-generator-gui

    "mybatis-generator-gui" 是一个基于MyBatis框架的可视化工具,主要用于简化数据库映射文件(Mapper文件)的创建过程。MyBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射,避免了几乎所有...

    mybatis-generator-core-1.3.7-API文档-中英对照版.zip

    赠送jar包:mybatis-generator-core-1.3.7.jar; 赠送原API文档:mybatis-generator-core-1.3.7-javadoc.jar; 赠送源代码:mybatis-generator-core-1.3.7-sources.jar; 赠送Maven依赖信息文件:mybatis-generator-...

    mybatis-generator-1.3.2 代码生成

    【标题】"mybatis-generator-1.3.2 代码生成" 涉及到的是一个基于MyBatis框架的代码生成工具,主要用于自动化地创建MyBatis的SQL映射文件、Mapper接口、Mapper XML文件以及实体类。这个工具极大地提高了开发效率,...

    mybatis-generator-core-1.3.2

    "mybatis-generator-core-1.3.2" 是 MBG 的一个特定版本,它包含了所有必要的组件来帮助我们自动化 MyBatis 配置和代码生成过程。 MyBatis Generator 使用 XML 配置文件来定义生成规则,包括数据库连接信息、表选择...

    mybatis-generator-core-1.3.5.jar

    支持接口和XML更名的mybatis-generator,具体使用参考 https://blog.csdn.net/zzti_erlie/article/details/99606620

    springboot+mybatis-generator.rar

    在IT行业中,SpringBoot和MyBatis-Generator是两个非常重要的工具,它们分别代表了微服务开发框架和自动化代码生成工具。将它们结合使用可以大大提高开发效率,减少手动编写重复代码的时间,使得开发者能更专注于...

    mybatis-generator-core-1.3.5-API文档-中文版.zip

    赠送jar包:mybatis-generator-core-1.3.5.jar; 赠送原API文档:mybatis-generator-core-1.3.5-javadoc.jar; 赠送源代码:mybatis-generator-core-1.3.5-sources.jar; 包含翻译后的API文档:mybatis-generator...

    逆向工程mybatis-generator-1.3.2

    在这个场景中,“逆向工程mybatis-generator-1.3.2”指的是对MyBatis Generator 1.3.2版本的源代码或执行流程进行逆向分析。MyBatis Generator(MBG)是一个强大的工具,能够自动生成MyBatis接口和映射器XML文件,...

    mybatis-generator-core-1.3.5-API文档-中英对照版.zip

    赠送jar包:mybatis-generator-core-1.3.5.jar 赠送原API文档:mybatis-generator-core-1.3.5-javadoc.jar 赠送源代码:mybatis-generator-core-1.3.5-sources.jar 包含翻译后的API文档:mybatis-generator-core-...

    mybatis-generator-core.zip

    java -jar mybatis-generator-core-1.3.2.jar -configfile mysqlGeneratorConfig.xml -overwrite #sql server java -jar mybatis-generator-core-1.3.2.jar -configfile sqlServerGeneratorConfig.xml -overwrite ...

    mybatis-generator-gui-plus

    《mybatis-generator-gui-plus详解:提升MyBatis开发效率的利器》 在Java开发领域,MyBatis作为一款优秀的持久层框架,以其简洁、灵活的特性深受开发者喜爱。然而,面对大量的数据库操作,手动编写SQL映射文件、...

    mybatis-generator-1.4.0.rar

    `mybatis-generator-1.4.0.rar` 是一个压缩包,包含了MBG的1.4.0版本及其相关的资源,包括可能的使用说明和运行所需的jar包。 **1. MyBatis Generator(MBG)简介** MyBatis Generator是MyBatis框架的一个插件,它...

    mybatis-generator-gui-0.8.8-SNAPSHOT.jar

    mybatis-generator-gui自动生成代码的工具,但是jdk必须大于1.8

    mybatis-generator-gui.rar

    最新mybatis逆向生成工具,方便简单实用,maven地址 &lt;groupId&gt;org.mybatis.generator &lt;artifactId&gt;mybatis-generator-core &lt;version&gt;1.3.2 &lt;/dependency&gt;

    mybatis-generator自动生成代码[增加Service的生成]

    标题 "mybatis-generator自动生成代码[增加Service的生成]" 指的是MyBatis Generator(MBG)这一工具,它能够根据数据库表结构自动产生Java持久层代码,大大减轻了开发人员的手动编码工作。在描述中提到"增加Service...

    mybatis-generator(2020年).zip

    2. **Mybatis-generator配置**: 使用Mybatis-generator首先需要一个配置文件,通常为`generatorConfig.xml`。在这个文件中,你可以定义数据源信息、生成的目标文件位置、需要生成的类和接口等。比如,你可以指定...

Global site tag (gtag.js) - Google Analytics