1. 程式人生 > >MyBatis逆向工程自動生成程式碼(附資料庫表結構)

MyBatis逆向工程自動生成程式碼(附資料庫表結構)

一、逆向工程介紹

逆向工程是一個專門為 MyBatis 框架使用者設計的程式碼生成器,可以根據資料庫中的表字段名,自動生成 POJO 類,mapper 介面與 SQL 對映檔案。支援基本的增刪改查功能,以及自定義條件的查詢。但是不支援複雜 SQL 與儲存過程。

二、環境準備:

資料庫結構檔案 (拷貝直接執行即可):

t_employee表結構:

DROP TABLE IF EXISTS `t_employee`;
CREATE TABLE `t_employee` (
  `id` int(11) unsigned zerofill NOT NULL AUTO_INCREMENT,
  `username`
varchar(30) DEFAULT NULL, `gender` char(1) DEFAULT NULL, `email` varchar(20) DEFAULT NULL, `d_id` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8;

t_dept表結構:

DROP TABLE IF EXISTS `t_dept`;
CREATE TABLE `t_dept` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `dept_name`
varchar(20) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

pom.xml中新增對應的依賴 (如果不是 Maven 專案,可以點選上面的 GitHub 地址下載 jar 包):

        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator</artifactId
>
<version>1.3.6</version> </dependency>

建立目錄,用於指定程式碼生成的位置:
這裡寫圖片描述

三、程式碼生成過程

逆向工程配置檔案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 元素用於指定生成一組物件的環境。
        targetRuntime:MyBatis3Simple 只生成提供簡單增刪改查的程式碼
    -->
    <context id="testTables" targetRuntime="MyBatis3Simple">

        <commentGenerator>
            <!-- 是否去除自動生成的註釋 true:是 : false:否 -->
            <property name="suppressAllComments" value="true" />
        </commentGenerator>

        <!-- 資料庫連線的資訊:驅動類、連線地址、使用者名稱、密碼 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver" 
                            connectionURL="jdbc:mysql://localhost/mybatis-study" 
                                userId="root"
                                    password="1234">
        </jdbcConnection>

        <!-- 預設 false,把 JDBC DECIMAL 和 NUMERIC 型別解析為 Integer,為 true 時把 JDBC DECIMAL 和   
            NUMERIC 型別解析為 java.math.BigDecimal -->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>

        <!-- 
            targetPackage:指定 POJO 類生成後所在的包的位置
            targetProject:指定生成 POJO 類的位置 
        -->
        <javaModelGenerator targetPackage="com.jas.mybatis.bean"
                            targetProject=".\src\main\java">
            <!-- enableSubPackages:是否讓 schema 作為包的字尾 -->
            <property name="enableSubPackages" value="false" />
            <!-- 從資料庫返回的值被清理前後的空格 -->
            <property name="trimStrings" value="false" />
        </javaModelGenerator>

        <!-- 
            targetPackage:指定生成的 SQL 對映檔案所在的位置
        -->
        <sqlMapGenerator targetPackage="mapper-config"
                         targetProject=".\src\main\resources/">
            <!-- enableSubPackages:是否讓 schema 作為包的字尾 -->
            <property name="enableSubPackages" value="false" />
        </sqlMapGenerator>

        <!-- 
            targetPackage:指定 mapper 介面生成包的位置 
        -->
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="com.jas.mybatis.mapper"
                             targetProject=".\src\main\java">
            <!-- enableSubPackages:是否讓 schema 作為包的字尾 -->
            <property name="enableSubPackages" value="false" />
        </javaClientGenerator>

        <!-- 
            指定資料庫表
            tableName:指定表名
            domainObjectName:指定生成的 POJO 的類名
         -->
        <table tableName="t_employee" domainObjectName="Employee"/>
        <table tableName="t_dept" domainObjectName="Department"/>
    </context>
</generatorConfiguration>  

將配置檔案放在工程下:
這裡寫圖片描述
執行生成程式碼的方式有很多,比如使用 Maven 外掛,XML 配置檔案等,這裡我們通過程式碼的方式一鍵執行。

    @Test
    public void testMBG() throws Exception{
        List<String> warnings = new ArrayList<String>();

        boolean overwrite = true;
        // 指定程式碼生成配置檔案的位置
        File configFile = new File("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);

    }

執行結果:
這裡寫圖片描述
下面是 mapper 介面中自動生成的方法,只生成了五個基本的增改查方法。這幾個方法能不能使用呢?下面就來測試一下。
這裡寫圖片描述
測試:

    private SqlSessionFactory getSqlSessionFactory() throws IOException {
        String resource = "mybatis-config.xml";
        InputStream is = Resources.getResourceAsStream(resource);

        return new SqlSessionFactoryBuilder().build(is);
    }

    @Test
    public void testMyBatis3Simple() throws IOException {
        SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
        SqlSession sqlSession = sqlSessionFactory.openSession();

        // 向資料中查詢 id 為 1 的使用者資訊
        EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
        Employee employee = employeeMapper.selectByPrimaryKey(1);

        System.out.println(employee.getUsername());
    }

測試結果:
這裡寫圖片描述

四、總結

這篇部落格主要介紹了 MyBatis 中關於逆向工程的使用,逆向工程的使用可以簡化我們的開發過程,提高開發效率。MyBatis 還支援其他幾種生成程式碼的方式,只需要在<context>標籤中設定targetRuntime屬性即可。

上面我們設定的值是 MyBatis3Simple,這種方式在生成程式碼的時候只會生成最基本的增刪程式碼;還可以設定為MyBatis3,這種方式生成的程式碼支援多條件查詢語句,還有其他的值可以設定,這裡就不再多解釋了。

一般情況下我們只用來生成最基本的程式碼,複雜的 SQL 語句還是由開發人員自己定義比較好。最後希望這篇博文能夠為你提供幫助。