【问题标题】:Mybatis Generator's bug: configuration items should be ordered?Mybatis Generator的bug:配置项要排序?
【发布时间】:2019-04-01 13:06:09
【问题描述】:

如果我将“”放在“”之后,MBG 会提出上下文内容应该匹配的错误:blablabla... 但是当我将“”放在“”之前时,一切正常。在这里我要向官网投诉,如果需要这些物品的订单,为什么不告诉我们!多么重要的事情!你在和新生开玩笑。可能是我不知道的地方,但这是成功构建MBG配置文件的关键点,为什么不把这个注释放在教程的顶部或醒目的地方呢?

    <generatorConfiguration > 
  <classPathEntry location="D:\mariadb-java-client-1.1.7.jar" />
  <context id="db" >
    <commentGenerator> 
        <property name="suppressAllComments" value="true" />
        <property name="suppressDate" value="true" />
    </commentGenerator> 
    <jdbcConnection driverClass="org.mariadb.jdbc.Driver" 
                    connectionURL="jdbc:mariadb://localhost:3306/dbname" 
                    userId="root" 
                    password="password" 
    />
    <javaTypeResolver >
      <property name="forceBigDecimals" value="false" />
    </javaTypeResolver> 
    <!-- Model Class -->
    <javaModelGenerator targetPackage="org.infrastructure.model" targetProject="infrastructure\src\main\java">
      <property name="enableSubPackages" value="false" />
      <property name="trimStrings" value="true" />
    </javaModelGenerator>

    <!-- XML Files -->
    <sqlMapGenerator targetPackage="sqlMap"  targetProject="infrastructure\src\main\config">
      <property name="enableSubPackages" value="false" />
    </sqlMapGenerator>

    <!-- DAO -->
    <javaClientGenerator type="XMLMAPPER" targetPackage="org.infrastructure.dao"  targetProject="infrastructure\src\main\java">
      <property name="enableSubPackages" value="false" />
    </javaClientGenerator> 

    <!-- Tables -->
    <table tableName="user" domainObjectName="User" ></table>  
  </context>
</generatorConfiguration>

【问题讨论】:

  • 对不起,我没抓到你。你能告诉我在哪里可以得到生成器的例子吗?或者只是显示更多您的配置?
  • 感谢您的回复。
  • 你用的是什么版本的mybatis generator?在最新的快照(1.3.3-SNAPSHOT)中,您的配置没有根元素(DOCTYPE)并且它是无效的。

标签: mybatis mybatis-generator


【解决方案1】:

首先,在您的xml 配置文件中,它不包含有效的根元素,它始终应该像&lt;!DOCTYPE .../&gt;。关于如何在mybatis生成器配置文件中添加正确的根元素,请参见MyBatis GeneratorXML Configuration File Reference中的示例。

如果您正确指定了根元素,如下所示:

<!DOCTYPE generatorConfiguration PUBLIC 
  "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
  "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"
>

这个根元素包含一个典型的DTD 声明,位于http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd。这是需要这些项目的顺序的定义。我们要看看它是什么样子的。

从该文档类型定义的第 47 行开始,它定义了名为 context 的元素。内容如下:

<!--
  The context element is used to describe a context for generating files, and the source tables.
-->
<!ELEMENT context (property*, plugin*, commentGenerator?, jdbcConnection, javaTypeResolver?,javaModelGenerator, sqlMapGenerator?, javaClientGenerator?, table+)>

其中明显定义了context中元素的顺序,即:

property*, plugin*, commentGenerator?, jdbcConnection, 
javaTypeResolver?,javaModelGenerator, sqlMapGenerator?,
javaClientGenerator?, table+

在此元素中,所有子元素必须以following rules 出现:

  1. + 用于指定该项目必须出现一次或多次——每次出现的有效内容可能不同;
  2. * 用于指定允许出现任意数量(零个或多个)——该项是可选的,每次出现的有效内容可能不同;
  3. ? 指定出现次数不得超过一次——该项是可选的;
  4. 如果没有量词,则指定项必须在元素内容中的指定位置恰好出现一次。

了解了它的真正含义后,为什么不能改变commentGeneratorjdbcConnection的顺序应该很清楚了。

也许您想知道如何使元素无序,问题How to define DTD without strict element order 可能很有用。

希望对您有所帮助。

【讨论】:

  • 是的,显然。无论如何感谢您的回应。我的抱怨是 MGB 应该把这个重要的东西放在它的教程中的一些引人注目的位置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多