1. 程式人生 > >MyBatis學習之程式碼生成器Generator

MyBatis學習之程式碼生成器Generator

  • MyBatis Generator (MBG) 是一個Mybatis的程式碼生成器,它可以幫助我們根據資料庫中表的設計生成對應的實體類,xml Mapper檔案,介面以及幫助類(也就是我們可以藉助該類來進行簡單的CRUD操作),這樣就避免了我們每使用到一張表的資料就需要手動去建立對應的類和xml檔案,這就幫我們節約了大量的時間去開發和業務邏輯有關的功能,但是如果對聯合查詢和儲存過程您仍然需要手寫SQL和物件。下面我主要介紹基於Maven和普通的Java工程兩種方式來生成相應的檔案。

基於Maven外掛的方式

  1. 首先我們應該建立一個Maven工程,在pom.xml檔案中新增我們所需要用到的jar包的依賴以及新增mybatis-generator-maven-plugin外掛,但需要注意的是裡面的標籤指定generatorConfig.xml檔案的位置好像不起作用,預設就是讀取src/main/resources下面的xml檔案,放在其它地方都不起作用,而且會報錯,說generatorConfig.xml檔案找不到:
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <mybatis-generator.version>1.3.2</mybatis-generator.version>
    <mysql.version>5.1.13</mysql.version>
    <mybatis.version>3.2.4</mybatis.version>
 </properties
>
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>mysql</groupId
>
<artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>${mybatis-generator.version}</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> </dependencies> <build> <finalName>mybatis-generator</finalName> <pluginManagement> <plugins> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>${mybatis-generator.version}</version> <!-- 資料庫驅動 --> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> </dependencies> <!-- 自動生成 --> <executions> <execution> <id>Generate MyBatis Artifacts</id> <goals> <goal>generate</goal> </goals> <configuration> <!-- 指定檔案位置好像不起作用,始終預設讀取src/main/resources/generatorConfig.xml檔案 --> <configurationFile>src/main/resources/generatorConfig.xml</configurationFile> <!--允許移動生成的檔案--> <verbose>true</verbose> <!--允許覆蓋生成的檔案--> <overwrite>true</overwrite> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.5</source> <target>1.5</target> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </pluginManagement> </build>

2.上面說到的generatorConfig.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> 
    <properties resource="mybatis_generator.properties" />
    <context id="MBG" targetRuntime="MyBatis3" defaultModelType="conditional">
        <!-- 注意以下標籤的順序:property*,plugin*,commentGenerator?,jdbcConnection,
                javaTypeResolver?,javaModelGenerator,sqlMapGenerator?,
                javaClientGenerator?,table+ -->
        <plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin" />
        <!-- 這個外掛給由MBG生成的Java模型物件增加了equals和hashCode方法 -->
        <plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin"/>
        <commentGenerator>
            <!-- 是否去除自動生成的註釋 true:是 : false:否 -->
            <property name="suppressAllComments" value="false"/>
            <!-- 不希望生成的註釋中包含時間戳 -->
            <property name="suppressDate" value="true" />
            <!-- 是否  自動為每一個生成的類建立一個構造方法-->
            <property name="constructorBased" value="false"/>
        </commentGenerator>
        <!-- 資料庫連線 -->
        <jdbcConnection 
            driverClass="${jdbc_driver}" 
            connectionURL="${jdbc_url}"
            userId="${jdbc_username}" 
            password="${jdbc_password}">
        </jdbcConnection>
        <!-- 指定生成的型別為java型別,避免資料庫中number等型別欄位 -->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>
        <!-- 生成model模型,對應的包,存放位置可以指定具體的路徑,如/ProjectName/src,也可以使用MAVEN來自動生成 -->
        <javaModelGenerator targetPackage="${modelPackage}" targetProject="${targetProject}">
            <!-- 在targetPackage的基礎上,根據資料庫的schema再生成一層package,最終生成的類放在這個package下,預設為false -->
            <property name="enableSubPackages" value="true"/>
            <!-- 設定是否在getter方法中,對String型別欄位呼叫trim()方法 -->
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        <!--對應的xml mapper檔案  -->
        <sqlMapGenerator targetPackage="${sqlMapperPackage}" targetProject="${targetProject}" >
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator> 
        <!-- 對應的dao介面 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="${daoMapperPackage}" targetProject="${targetProject}" >
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>

        <!-- 表名對應生成的實體 -->      
        <table tableName="ecjtu_tab_user" domainObjectName="User" />
        <!-- enableCountByExample="false" enableUpdateByExample="false"
        enableDeleteByExample="false" enableSelectByExample="false"
        selectByExampleQueryId="false">  指定是否生成操作資料庫對應的方法 -->
    </context>
</generatorConfiguration>

注:該配置檔案中有兩個要注意的地方:
a、配置檔案中的註釋應該為:<!--這是註釋-->,不能在註釋裡面再巢狀–之類的符號,比如:<!----這--是註釋-->,否則執行時會提示報錯資訊。
b、標籤裡面元素是有順序的,如果順序亂了也會報錯的,順序依次為:

property——>plugin——>commentGenerator——>jdbcConnection——>
javaTypeResolver——>javaModelGenerator——>sqlMapGenerator——>
javaClientGenerator——>table+

3.對於generatorConfig.xml檔案中引入的mybatis_generator.properties檔案,裡面主要是資料庫連線資訊和生成的檔案的目錄資訊,我們可以在generatorConfig.xml的同目錄下建立該檔案:

#資料庫配置 
#jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&amp;characterEncoding=UTF-8
jdbc_url=jdbc:mysql://localhost:3306/test
jdbc_driver=com.mysql.jdbc.Driver
jdbc_username=root
jdbc_password=admin

#執行:右鍵 Run As ---->Maven build ---->Goals:mybatis-generator:generate
#輸出目錄
targetProject=src/main/java
#modelPackage,sqlMapperPackage,daoMapperPackage 通常一致
modelPackage=com.ecjtu.generator.entitys
sqlMapperPackage=com.ecjtu.generator.entitys
daoMapperPackage=com.ecjtu.generator.entitys

4.建立好了以上三個檔案後,我們再建立一個包路徑就可以執行了,也就是在src/main/java下建立mybatis_generator.properties檔案中指定的生成實體的包路徑,即上面所指定的com.ecjtu.generator.entitys包,建立好了之後再右鍵pom.xml檔案,Run As —->Maven build —->Goals:mybatis-generator:,執行該操作後重新整理以下該專案你所生成的檔案就都出現了

普通的Java工程生成實體

這種方式較Maven外掛的方式也就是我們自己寫一個類在Main方法中去讀取generatorConfig.xml檔案,然後去生成對應的檔案。

  1. 既然不用Maven當中的外掛,而且是一個普通的Java工程,那麼就需要我們自己手動引入相關的Jar包,在src下面新建一個lib資料夾,把用到的jar包複製到該資料夾下面,引入的jar包如下圖:
    這裡寫圖片描述

  2. jar包引入好了之後,其他的配置檔案跟使用Maven的方式差不多,也是配置generatorConfig.xml檔案以及mybatis_generator.properties檔案。其中generatorConfig.xml檔案和Maven方式唯一不同的就是需要在 標籤外指明驅動包的位置:

<!-- 使用絕對路徑,不然可能會找不到jar包 -->
    <classPathEntry location="E:\JavaStudy\DevlopeEnvironment\workspace\MyBatisGeneratorMain\lib\mysql-connector-java-5.1.22-bin.jar" />

3.最後一個也就是建立一個類,在Main方法中讀取generatorConfig.xml檔案,然後生成相應的檔案

package com.ecjtu.generator.main;

import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

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

public class GenMain {
    public static void main(String[] args) {
        List<String> warnings = new ArrayList<String>();
        boolean overwrite = true;//如果已經生成過了是否進行覆蓋
        String genCfg = "/generatorConfig.xml";//配置檔案的路徑:預設放到src下面
        URL url = GenMain.class.getResource(genCfg);
        String file = url.getFile();
        File configFile = new File(file);
        ConfigurationParser cfgParser = new ConfigurationParser(warnings);//配置檔案解析器
        Configuration config = null;
        try {
            config = cfgParser.parseConfiguration(configFile);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (XMLParserException e) {
            e.printStackTrace();
        }
        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        MyBatisGenerator generator = null;
        try {
            generator = new MyBatisGenerator(config, callback, warnings);
        } catch (InvalidConfigurationException e) {
            e.printStackTrace();
        }
        try {
            generator.generate(null);
            System.out.println("mybatis 程式碼生成成功。。。");
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

4.最後也就大功告成了,直接右鍵執行java程式,再重新整理一下,生成的檔案就都出現了。

到這裡,MyBatis基於Maven和普通的Java工程生成實體的兩種方式就都介紹完了。。。。。。。。。。。