1. 程式人生 > >Mybatis Generator異常【Mapper外掛缺少必要的mappers屬性】解決

Mybatis Generator異常【Mapper外掛缺少必要的mappers屬性】解決

        最近使用Mybatis Generator的過程中,出現了以下異常,導致生成不了實體、配置檔案等,無奈去網上找,也花了不少時間但就是沒有找到解決辦法,,,但是前兩週還是好的,我也還用過的!

異常

Failed to execute goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.5:generate (default-cli) on project itsm: Execution default-cli of goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.5:generate failed: Mapper外掛缺少必要的mappers屬性!


問題分析解決

        先說下這依賴配置和Generator的配置,依賴配置檔案如下:

<!-- mybatis -->
<dependency>
   <groupId>org.mybatis.spring.boot</groupId>
   <artifactId>mybatis-spring-boot-starter</artifactId>
   <version>1.3.1</version>
</dependency>
<!-- 通用mapper --> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>1.1.5</version> </dependency> <!-- pagehelper 分頁外掛 --> <dependency> <groupId>com.github.pagehelper</
groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.3</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>
<build>
   <plugins>
      <plugin>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
      <!-- mybatis generator -->
      <plugin>
         <groupId>org.mybatis.generator</groupId>
         <artifactId>mybatis-generator-maven-plugin</artifactId>
         <version>1.3.5</version>
         <dependencies>
            <!--配置這個依賴主要是為了等下在配置mybatis-generator.xml的時候可以不用配置classPathEntry這樣的一個屬性,避免程式碼的耦合度太高-->
            <dependency>
               <groupId>mysql</groupId>
               <artifactId>mysql-connector-java</artifactId>
               <version>5.1.44</version>
            </dependency>
            <dependency>
               <groupId>tk.mybatis</groupId>
               <artifactId>mapper</artifactId>
               <version>3.4.0</version>
            </dependency>
         </dependencies>
         <executions>
            <execution>
               <id>Generate MyBatis Artifacts</id>
               <phase>package</phase>
               <goals>
                  <goal>generate</goal>
               </goals>
            </execution>
         </executions>
         <configuration>
            <!--允許移動生成的檔案-->
            <verbose>true</verbose>
            <!-- 是否覆蓋-->
            <overwrite>true</overwrite>
            <!-- 自動生成的配置 -->
            <configurationFile>src/main/resources/mybatis-generator-cfg.xml</configurationFile>
         </configuration>
      </plugin>
   </plugins>
</build>

        Mybatis Generator對應的配置檔案如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<generatorConfiguration>

    <!-- 載入配置檔案 -->
    <properties resource="application-dev.properties" />

    <!--<classPathEntry location="${jdbc.location}" />-->

    <!--<context id="mysql" targetRuntime="MyBatis3">-->
    <context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
        <!--<property name="beginningDelimiter" value="`"/>-->
        <!--<property name="endingDelimiter" value="`"/>-->

        <plugin type="tk.mybatis.mapper.generator.MapperPlugin">
            <property name="mappers" value="com.woxin.itsm.framework.mapper.BaseMapper"/>
            <!--caseSensitive預設false,當資料庫表名區分大小寫時,可以將該屬性設定為true-->
            <property name="caseSensitive" value="true"/>
        </plugin>

        <!-- 註釋 -->
        <commentGenerator>
            <property name="javaFileEncoding" value="UTF-8"/>
            <!-- 是否生成註釋代時間戳 -->
            <property name="suppressDate" value="true"/>
            <!-- 是否去除自動生成的註釋 true:是 : false:否 -->
            <property name="suppressAllComments" value="false"/>
        </commentGenerator>

        <!-- 資料庫連線 -->
        <jdbcConnection driverClass="${spring.datasource.driver-class-name}"
                connectionURL="${spring.datasource.url}"
                userId="${spring.datasource.username}"
                password="${spring.datasource.password}">
        </jdbcConnection>

        <!-- 非必需,型別處理器,在資料庫型別和java型別之間的轉換控制 -->
        <!-- 預設false,把JDBC DECIMAL 和 NUMERIC 型別解析為 Integer,為 true時把JDBC DECIMAL 和-->
        <!--NUMERIC 型別解析為java.math.BigDecimal -->
        <!--<javaTypeResolver type="org.mybatis.generator.internal.types.JavaTypeResolverDefaultImpl">-->
        <javaTypeResolver>
            <!-- 是否使用bigDecimal, false可自動轉化以下型別(Long, Integer, Short, etc.)-->
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>

        <!-- 生成實體類地址 -->
        <javaModelGenerator targetPackage="com.woxin.itsm.model" targetProject="src/main/java">
            <!-- enableSubPackages:是否讓schema作為包的字尾 -->
            <property name="enableSubPackages" value="true" />
            <!-- 從資料庫返回的值被清理前後的空格 -->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>

        <!-- 生成mapper xml檔案 -->
        <sqlMapGenerator targetPackage="mapper"  targetProject="src/main/resources">
            <!-- enableSubPackages:是否讓schema作為包的字尾 -->
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>

        <!-- 生成DAO層-->
        <!-- type="ANNOTATEDMAPPER",生成Java Model和基於註解的Mapper物件-->
        <!-- type="XMLMAPPER",生成SQLMap XML檔案和獨立的Mapper介面-->
        <javaClientGenerator targetPackage="com.woxin.itsm.mapper" targetProject="src/main/java" type="XMLMAPPER">
            <!-- enableSubPackages:是否讓schema作為包的字尾 -->
            <property name="enableSubPackages" value="false" />
        </javaClientGenerator>

        <!-- 配置表資訊 -->
        <!-- schema即為資料庫名 tableName為對應的資料庫表 domainObjectName是要生成的實體類 enable*ByExample
            是否生成 example類 -->
        <table tableName="sys_user" domainObjectName="User" enableCountByExample="false">
            <generatedKey column="id" sqlStatement="Mysql" identity="true"/>
        </table>
        <!--<table schema="itsm" tableName="sys_user"-->
               <!--domainObjectName="User" enableCountByExample="false"-->
               <!--enableDeleteByExample="false" enableSelectByExample="false"-->
               <!--enableUpdateByExample="false">-->
            <!--&lt;!&ndash; mysql配置 &ndash;&gt;-->
            <!--<generatedKey column="id" sqlStatement="Mysql" identity="true"/>-->
            <!--&lt;!&ndash; oracle 配置 &ndash;&gt;-->
            <!--&lt;!&ndash;<generatedKey column="id" sqlStatement="select SEQ_{1}.nextval from dual" identity="false" type="pre"/>&ndash;&gt;-->
        <!--</table>-->

        <!--<table schema="blog" tableName="article"-->
        <!--domainObjectName="Article" enableCountByExample="false"-->
        <!--enableDeleteByExample="false" enableSelectByExample="false"-->
        <!--enableUpdateByExample="false">-->
        <!--</table>-->

        <!--<table schema="blog" tableName="document"-->
        <!--domainObjectName="Document" enableCountByExample="false"-->
        <!--enableDeleteByExample="false" enableSelectByExample="false"-->
        <!--enableUpdateByExample="false">-->
        <!--</table>-->

        <!--<table schema="blog" tableName="tag"-->
        <!--domainObjectName="Tag" enableCountByExample="false"-->
        <!--enableDeleteByExample="false" enableSelectByExample="false"-->
        <!--enableUpdateByExample="false">-->
        <!--</table>-->

    </context>
</generatorConfiguration>

        仔細想了下,依賴和配置檔案其實是沒有改過的,實在是搞不明白,找了幾個小時網上也有找到解決辦法,不知道是不是沒有遇到過這樣的情況。

        唯一變過的就是專案的Maven配置,原來專案中使用的Maven是IDEA工具自身的配置,後來我把Maven的對應的配置檔案和本地依賴儲存的路徑改了,會不會沒有載入到呢?雖然基本上沒可能,但是嘗試了,果然還是報錯。重新引入了依賴、關閉IDEA重啟這樣無厘頭的做法都試了,還是沒用,最後還是得仔細看下提示的異常,根據提示資訊來理解錯誤,找到解決辦法。

        Mapper外掛缺少必要的mappers屬性!這裡我想外掛本身是沒有問題的,因為它出錯的概率太小了,有問題也是因為關聯的架包或者配置檔案造成的,所以看了下generator的配件檔案,跟mappers最接近的,就是下面紅色標記的地方了。原來寫的是mapper,當時也是可以用的,但不知道為什麼這次就用不了了,反正問題解決了,暫時沒還仔細想真正原因是什麼!如果有朋友想到了,請留言告知,多謝!!!