1. 程式人生 > >spring boot整合mybatis-generator的填坑之路

spring boot整合mybatis-generator的填坑之路

第一步: 在pom.xml檔案中新增:

<plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.2</version>
                <configuration>
                    <configurationFile
>
${basedir}/src/main/resources/generator/mybatis_generator.xml </configurationFile> <overwrite>true</overwrite> <verbose>true</verbose> </configuration> </plugin
>
<dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.2</version> <scope>compile</scope> <optional>true</optional
>
</dependency> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>1.2.4</version> </dependency>

第二步: 在resources資料夾下新建資料夾:generator。然後新建命名為:mybatis_generator.xml的檔案. 內容如下:

<?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" defaultModelType="flat">
        <property name="suppressDate" value="`"/>
        <!-- 是否去除自動生成的註釋 true:是 : false:否 -->
        <property name="suppressAllComments" value="`"/>


        <plugin type="tk.mybatis.mapper.generator.MapperPlugin">
            <property name="mappers" value="com.xxx.xxx.util.MyMapper"/>
        </plugin>

        <!--資料庫連結URL,使用者名稱、密碼 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://xxxxxx?"
                        userId="xxx"
                        password="xxx">
        </jdbcConnection>

        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>

        <!-- 生成模型的包名和位置-->
        <javaModelGenerator targetPackage="com.xxx.xxx.model" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>

        <!-- 生成對映檔案的包名和位置-->
        <sqlMapGenerator targetPackage="mapping" targetProject="src/main/resources">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>

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

        <!-- 要生成的表 tableName是資料庫中的表名或檢視名 domainObjectName是實體類名-->
        <table tableName="資料庫表名"
               enableCountByExample="false" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false"
               selectByExampleQueryId="false">
        </table>
    </context>
</generatorConfiguration>

第三步: 在路徑:src/com/xxx/xxx/util下新建名為:MyMapper的inteface,內容如下:

package com.lianjia.freemarker.util;

import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper;

/**
 * 繼承自己的MyMapper
 *
 * @author MR.ji
 * @since 2015-09-06 21:53
 */
public interface MyMapper<T> extends Mapper<T>, MySqlMapper<T> {
    //TODO
    //FIXME 特別注意,該介面不能被掃描到,否則會出錯
}

這個檔案主要跟上面第二步新建的檔案中:

<plugin type="tk.mybatis.mapper.generator.MapperPlugin">
            <property name="mappers" value="com.xxx.xxx.util.MyMapper"/>
        </plugin>

相呼應。

第四步: 在路徑:src/com/xxx/xxx/util下新建名為:GeneratorDisplay的class類,內容如下:

package com.lianjia.freemarker.util;

import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class GeneratorDisplay {

    public void generator() throws Exception {

        List<String> warnings = new ArrayList<String>();
        boolean overwrite = true;
        //指定 逆向工程配置檔案
        File configFile = new File("src/main/resources/generator/mybatis_generator.xml");
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = cp.parseConfiguration(configFile);
        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,
                callback, warnings);
        myBatisGenerator.generate(null);

    }

    public static void main(String[] args) throws Exception {
        try {
            GeneratorDisplay generatorSqlmap = new GeneratorDisplay();
            generatorSqlmap.generator();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

到此,基本整合就完畢了。說說我遇到的第一個坑。Maven什麼的都設定好之後,從中央倉庫無論如何無法下載跟generator外掛相關的jar,最後更改了下載路徑設定成為阿里巴巴的倉庫。這個小夥伴兒們哪怕不用外掛也可以設定一下。畢竟下載倉庫在國內的jar,遠比國外要快得多。順便貼出來修改的地方:

<mirror>
   <id>alimaven</id>
   <name>aliyun maven</name>
   <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
   <mirrorOf>central</mirrorOf>
</mirror>

第二個坑就是:

[ERROR] Failed to execute goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.2:generate (default-cli) on project freemarker: Execution default-cli of goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.2:generate failed: Exception getting JDBC Driver: com.mysql.jdbc.Driver -> [Help 1]
[ERROR]

無法獲取載入jdbc,這個問題困擾了我很久。也在網上尋找了很多處理的方法,結果到我這兒都不好使。比如說pom檔案中jdbc的版本過高造成的,或者本地jar路徑問題等等都嘗試過,都無法解決問題。最後沒辦法,加上了上文中第四步。 可以嘗試捨棄第四步。然後在Maven project→mybatis-generator→mybatis-generator:generate雙擊執行……

算是自己學習的心得了吧!