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">--> <!--<!– mysql配置 –>--> <!--<generatedKey column="id" sqlStatement="Mysql" identity="true"/>--> <!--<!– oracle 配置 –>--> <!--<!–<generatedKey column="id" sqlStatement="select SEQ_{1}.nextval from dual" identity="false" type="pre"/>–>--> <!--</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,當時也是可以用的,但不知道為什麼這次就用不了了,反正問題解決了,暫時沒還仔細想真正原因是什麼!如果有朋友想到了,請留言告知,多謝!!!