使用Mybatis逆向工程生成XML和Java文件

       Mybatis作爲一個半自動化的ORM框架,需要開發人員手動編寫Sql語句。當數據庫中的表格太多的時候,爲每一個表格的CRUD操作編寫Sql語句就顯得十分的繁瑣。Mybatis逆向工程可以針對單表自動生成所需要的代碼,比如mapper.xml映射文件,dao.java持久層接口,以及pojo實體類。

       首先,創建一個新的java工程,名叫Mybatis-Generator,不建議在原來的項目中生成逆向工程代碼,因爲會覆蓋原來的代碼,因此通常開發者都選擇新建一個項目專門用來生成逆向工程,再將需要的文件拷貝到自己的項目中去。然後導入三個jar包,分別是mybatis,mybatis-generator和mysql的jar包。同時,構建好三個包,分別是dao包用來存放生成的*dao.java文件,entity包用來存放實體類,mapper包用來存放生成的*mapper.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="testTables" targetRuntime="MyBatis3">
        <commentGenerator>
            <!-- 是否去除自動生成的註釋 true:是 : false:否 -->
            <property name="suppressAllComments" value="true" />
        </commentGenerator>
        <!--數據庫連接的信息:驅動類、連接地址、用戶名、密碼 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
            connectionURL="jdbc:mysql://localhost:3306/jtsys" userId="root"
            password="root">
        </jdbcConnection>
        <!-- <jdbcConnection driverClass="oracle.jdbc.OracleDriver"
            connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:yycg" 
            userId="yycg"
            password="yycg">
        </jdbcConnection> -->

        <!-- 默認false,把JDBC DECIMAL 和 NUMERIC 類型解析爲 Integer,爲 true時把JDBC DECIMAL 和 
            NUMERIC 類型解析爲java.math.BigDecimal -->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>

        <!-- targetProject:生成PO類的位置 -->
        <javaModelGenerator targetPackage="com.jt.entity"
            targetProject=".\src">
            <!-- enableSubPackages:是否讓schema作爲包的後綴 -->
            <property name="enableSubPackages" value="false" />
            <!-- 從數據庫返回的值被清理前後的空格 -->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>
        <!-- targetProject:mapper映射文件生成的位置 -->
        <sqlMapGenerator targetPackage="com.jt.mapper" 
            targetProject=".\src">
            <!-- enableSubPackages:是否讓schema作爲包的後綴 -->
            <property name="enableSubPackages" value="false" />
        </sqlMapGenerator>
        <!-- targetPackage:mapper接口生成的位置 -->
        <javaClientGenerator type="XMLMAPPER"
            targetPackage="com.jt.dao" 
            targetProject=".\src">
            <!-- enableSubPackages:是否讓schema作爲包的後綴 -->
            <property name="enableSubPackages" value="false" />
        </javaClientGenerator>
        <!-- 指定數據庫表 -->
        <table schema="" tableName="sys_configs"></table>
        <table schema="" tableName="sys_depts"></table>
        <table schema="" tableName="sys_dicts"></table>
        <table schema="" tableName="sys_logs"></table>
        <table schema="" tableName="sys_menus"></table>
        <table schema="" tableName="sys_role_menus"></table>
        <table schema="" tableName="sys_roles"></table>
        <table schema="" tableName="sys_user_roles"></table>
        <table schema="" tableName="sys_users"></table>

        <!-- 有些表的字段需要指定java類型
         <table schema="" tableName="">
            <columnOverride column="" javaType="" />
        </table> -->
    </context>
</generatorConfiguration>

       配置完畢,編寫一個java類用來啓動這些配置,生成逆向工程代碼。

package com.jt.generator;

import java.io.File;
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.internal.DefaultShellCallback;

public class GeneratorSqlMapper {
	public void generator() throws Exception{

        List<String> warnings = new ArrayList<String>();
        boolean overwrite = true;
        //指定 逆向工程配置文件
        File configFile = new File("config.xml"); 
        ConfigurationParser cp = new ConfigurationParser(warnings);
        //將配置文件的信息轉化爲Configuration對象
        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 {
        	System.out.println("here");
            GeneratorSqlMapper generatorSqlmapper = new GeneratorSqlMapper();
            generatorSqlmapper.generator();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

       運行之後,刷新項目可以看到我們需要的文件都生成在對應包中,此處的*Mapper.java文件就是我們需要的持久層接口。


       此處對應數據庫中的每一張表格有生成了兩個.java文件,名字較短的是與數據庫表格完全對應的實體類對象,即類中屬性和數據庫中的字段名完全對應。*Example.java是針對單一表格的CRUD操作進行了封裝,通過這個類裏的方法,我們可以更方便地自定義對數據庫的操作,例如去重複查詢、降序升序、針對單一字段的操作等等。

       

       以下是映射文件。


       雖然逆向工程爲開發人員提供了一些方便,不需要自行編寫實體類對象,生成了我們需要的dao接口和映射文件。但是可以逆向工程生成的文件中只涉及到了但以表格的操作,實際項目中往往會涉及到多個關聯表格的聯合操作,還有一些涉及到複雜業務的情況,這時候仍然需要開發人員自行編寫Sql語句。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章