MyBatis3-代碼生成工具的使用


以下內容引用自http://www.yihaomen.com/article/java/331.htm

MyBatis應用程序,需要大量的配置文件,對於一個成百上千的數據庫表來說,完全手工配置,這是一個很恐怖的工作量,所以MyBatis官方也推出了一個MyBatis代碼生成工具的JAR包。按照MyBatis Generator的doc文檔參考,初步配置出了一個可以使用的版本,主要有一下功能:

1、生成POJOs與數據庫結構對應

2、如果有主鍵,能匹配主鍵

3、如果沒有主鍵,可以用其他字段去匹配

4、動態select、update、delete方法

5、自動生成接口(也就是以前的dao層)

6、自動生成SQL Mapper,增刪改查各種語句配置,包括動態where語句配置

下面介紹下詳細過程:

1、創建測試工程,並配置MyBatis代碼生成jar包

        <!-- mysql-connector-java -->
        <!-- http://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
            <scope>system</scope>
            <systemPath>${project.build.outputDirectory}/lib/mysql-connector-java-5.1.38.jar</systemPath>
        </dependency>

        <!-- mybatis generator -->
        <!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core -->
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.5</version>
        </dependency>

2、在數據庫中創建測試表 

在Test數據庫中創建用來測試的category表

Drop TABLE IF EXISTS `category`;
Create TABLE `category` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `catname` varchar(50) NOT NULL,
  `catdescription` varchar(200) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3、配置MyBatis代碼生成工具的配置文件  

在創建的工程中,創建相應的package比如:

com.jsoft.testmybatis.inter用來存放MyBatis接口對象。

com.jsoft.testmybatis.mapper用來存放SQL Mapper對應的映射,SQL語句等。

com.jsoft.testmybatis.model用來存放與數據庫對應的Model 。

在用MyBatis代碼生成工具之前,這些目錄必須先創建好,作為一個好的應用程序,這些目錄的創建也是有規律的。

根據MyBatis代碼生成工具文檔,需要一個配置文件,這里命名為:mbgConfiguration.xml放在resources目錄下,配置文件內容如下:

<?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>

    <!--配置mysql驅動jar包路徑,這里問了方便直接采用相對路徑引入JAR包,並且對應POM也設置成項目的目錄-->
    <classPathEntry location="target/classes/lib/mysql-connector-java-5.1.38.jar" />

    <context id="jsoft_mysql_tables" targetRuntime="MyBatis3">

        <!--為了防止生成的代碼中有很多注釋,比較難看,加入下面的配置控制-->
        <commentGenerator>
            <property name="suppressAllComments" value="true" />
            <property name="suppressDate" value="true" />
        </commentGenerator>
        <!--注釋控制完畢-->

        <!--數據庫連接-->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1:3306/Test?serverTimezone=UTC" userId="root" password="root">
        </jdbcConnection>

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

        <!--數據表對應的model層-->
        <javaModelGenerator targetPackage="com.jsoft.testmybatis.model" targetProject="src/main/java">
            <property name="enableSubPackages" value="true" />
            <property name="trimStrings" value="true" />
        </javaModelGenerator>

        <!--SQL Mapper隱射配置文件-->
        <sqlMapGenerator targetPackage="com.jsoft.testmybatis.mapper" targetProject="src/main/java">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>

        <!--在ibatis2中是dao層,但在mybatis3中,其實就是mapper接口-->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.jsoft.testmybatis.inter" targetProject="src/main/java">
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>

        <!--要對那些數據表進行生成操作,必須要有一個-->
        <table schema="mybatis" tableName="category" domainObjectName="Category" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false">
        </table>

    </context>
</generatorConfiguration>

提示:更多的詳細配置參考官方文檔:http://www.mybatis.org/generator/index.html

4、用一個main方法來測試能否用MyBatis成生成剛剛創建的category表對應的Model,SQL Mapper等內容。

創建一個com.jsoft.testmybatis.test1的package,並在此package下面建立一個測試的類GenMain:

package com.jsoft.testmybatis.test1;

import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
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 = "/mbgConfiguration.xml";
        File configFile = null;
        try {
            configFile = new File(GenMain.class.getResource(genCfg).toURI().getPath());
        } catch (URISyntaxException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = null;
        try {
            config = cp.parseConfiguration(configFile);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (XMLParserException e) {
            e.printStackTrace();
        }
        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        MyBatisGenerator myBatisGenerator = null;
        try {
            myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
        } catch (InvalidConfigurationException e) {
            e.printStackTrace();
        }
        try {
            myBatisGenerator.generate(null);
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

5、運行測試的main方法,生成MyBatis相關代碼

運行GenMain類里的main方法,並刷新工程,會發現各自package目錄下已經相應生成了對應的文件,完全符合MyBatis規則,效果圖如下:

6、注意事項

如果想生成example之類的東西,需要在<table></table>里面去掉

enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="false"
selectByExampleQueryId="false"

這部分配置,這是生成Example而用的,一般來說對項目沒有用。

另外生成的SQL Mapper等,只是對單表的增刪改查,如果有多表join操作,就可以手動配置,如果調用存儲過程,也需要手工配置。這時工作量已經少很多了。

如果想用命令行方式處理,也是可以的。

比如:
java -jar mybatis-generator-core-1.3.2.jar -mbgConfiguration.xm -overwrite

這時,要用絕對路徑才行。另外mbgConfiguration.xml配置文件中targetProject的配置也必須是絕對路徑。

 

測試工程:https://github.com/easonjim/5_java_example/tree/master/mybatis/test9

 

參考:

http://www.yihaomen.com/article/java/331.htm

並附帶上面參考中的兩個生成工具,支持MySQL,Oracle:

鏈接:http://pan.baidu.com/s/1qX8Indq 密碼:kuja


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM