關於Mybatis generator的逆向生成出現mapper文件的接口生成不全的問題

這是一個坑啊

若是你的myabtis逆向生成也出現了這樣的問題,而且 配置文件沒有出任何問題,並且不存在數據庫表的沒有主鍵或者表結構不完整的低級問題,最可怕的是網上好多解決方法對你都沒有效果。那麼你多是Mysql版本的問題。php

在springBoot自動加載Mysql的時候會是這個樣子 java

你只須要改爲這樣:

沒有更改的時候生成的接口: mysql

更改後生成的接口:linux

個人問題就這樣結束了,其實在這時候糾結好久的時候就應該想到是版本的問題。spring

順便貼上個人配置文件 和 運行生成接口。

配置文件,應該能看懂sql

<?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>
    <context id="DB2Tables" targetRuntime="Mybatis3">
        <property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>
        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <!-- 是否去除自動生成的註釋 true:是 : false:否 -->
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <!--數據庫連接URL,用戶名、密碼 -->
        <!-- nullCatalogMeansCurrent 在5.1.42中默認是true,而在6.0.6默認爲false。-->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/training" userId="root" password="root">
        </jdbcConnection>

        <!-- 引入自定義類型轉換的實現類 -->
        <javaTypeResolver type="com.yangxin.demo.generator.MyJavaTypeResolver"></javaTypeResolver>

        <!-- 設置Java類生成的位置 targetPackage:表示生成的路徑,targetProject:表示生成的文件/項目下-->
        <javaModelGenerator targetPackage="com.yangxin.demo.dao.model" targetProject="src">
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="false"/>
        </javaModelGenerator>

        <!-- 生成映射文件xml存放位置;targetPackage:本身的包名;targetProject:該文件你想放位置(路徑的不要有中文) -->
        <sqlMapGenerator targetPackage="data.resources.mappers" targetProject="src">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>

        <!-- 生成DAO的包名和位置-->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.yangxin.demo.dao.mapper" targetProject="src">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>

        <!-- 要生成的表 tableName是數據庫中的表名或視圖名 domainObjectName是實體類名-->
        <table tableName="yx_user" domainObjectName="YxUser" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false">
            <generatedKey column="id" sqlStatement="MySql" identity="true"/>
        </table>
    </context>
</generatorConfiguration>
複製代碼

運行的主程序shell

public static void main(String[] args) {
    List<String> warnings = new ArrayList<>();
    // 配置文件路徑
    //String xmlPath = "\\src\\main\\resources\\generatorConfig.xml";
    String xmlPath = "\\src\\main\\resources\\generator2.xml";
    try {
        // System.getProperty("user.dir"),獲取當前的工做路徑,windows和linux裏的路徑格式不一致,這裏用來轉換
        String configFilePath = System.getProperty("user.dir").concat(
                isNotWindows() ? xmlPath.replaceAll("\\\\", "/") : xmlPath);
        logger.info("加載配置文件的路徑:" + configFilePath);
        boolean overwrite = true;
        File configFile = new File(configFilePath);
        // configFile.exists():測試此抽象路徑名錶示的文件或目錄是否存在, isFile() :表示測試此抽象路徑名錶示的文件是不是一個標準文件。
        logger.info("" + configFile.exists());
        // 建立配置解析器
        ConfigurationParser cp = new ConfigurationParser(warnings);
        // 調用解析器建立配置對象()
        Configuration config = cp.parseConfiguration(configFile);
        // 建立一個ShellCallback對象,shellCallback接口是處理文件的建立和合並,默認是不支持文件合併的。
        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        // 建立一個MyBatisGenerator對象。MyBatisGenerator類是真正用來執行生成動做的類
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);

        myBatisGenerator.generate(null);
    } catch (Exception e) {
        logger.error(e.getMessage(), e);
    }
    for (String wa : warnings) {
        logger.info("warning:" + wa);
    }
}

private static boolean isNotWindows() {
    // System.getProperty("os.name") 獲取當前運行的系統名稱
    return !System.getProperty("os.name").toLowerCase()
            .startsWith("windows");
}
複製代碼

做爲一個採坑人...但願大家別遇到,好難受的數據庫

相關文章
相關標籤/搜索