mybatis的逆向工程的使用


mybatis的逆向工程

由於mybates支持定制化sql,存儲過程以及高級映射的等的特點,目前已經成為java持久層的主流符的技術。平時的mybatis的配置文件,以及持久層的接口,經常讓我們的開發人員感到困擾。為此mybatis

的團隊開發了一個強大的代碼生成器-Mybatis Generator,以下簡稱MBG 通常也叫mybatis的逆向工程,從下面幾個方面來聊聊mybatis逆向工程的使用。

mybatis逆向工程的好處

  • 可以生成數據庫表中對應的實體類pojo

  • 生成Mapper的接口類,Mapper的XML文件。這些文件包含了單表的基本的操作CRUD.

  • 可以生成Example類,不過這個類型的類一般不會用到

可以看到MBG可以極大的程度上方便我們使用mybatis,簡化大量的重復工作。當然,要想了解更多的信息,可以訪問: http://www.mybatis.org/generator 來獲得更多的信息。

自定義實現一個mybatis的逆向工程

1. 數據庫建兩張測試的表,sql語句如下:

  DROP TABLE IF EXISTS `student`;
  CREATE TABLE `student`  (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `sno` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`student_name` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`grade` double NOT NULL,
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `student_id`(`sno`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
 -- Table structure for sys_course
-- ----------------------------
DROP TABLE IF EXISTS `sys_course`;
CREATE TABLE `sys_course`  (
`id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
`code` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '類別',
`name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT    '課程名',
`value` int(11) NOT NULL COMMENT '分數',
 PRIMARY KEY (`id`) USING BTREE
 ) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

 SET FOREIGN_KEY_CHECKS = 1;

2. 新建一個maven項目,並下載相應的依賴

 <dependencies>
    <dependency>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-core</artifactId>
        <version>1.3.7</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.27</version>
    </dependency>
</dependencies>

3. 在recourse下新建文件夾generator並在文件夾下創建逆向工程的配置文件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>


<context id="DB2Tables" targetRuntime="MyBatis3Simple" defaultModelType="flat">

    <!--注釋生成器,並且禁止在注釋中生成日期-->
    <commentGenerator>
        <property name="suppressDate" value="true"/>
        <property name="addRemarkComments" value="true"/>
    </commentGenerator>

    <!--連接數據庫的詳細信息-->
    <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                    connectionURL="jdbc:mysql://localhost:3306/mybaties"
                    userId="root"
                    password="chen2908">
    </jdbcConnection>

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

    <!--配置生成的包名。可以根據自己的需求進行修改-->
    <javaModelGenerator targetPackage="test.model" targetProject="src\main\java">
        <property name="enableSubPackages" value="true"/>
        <property name="trimStrings" value="true"/>
    </javaModelGenerator>

    <!--配置生成mapper.xml文件的位置-->
    <sqlMapGenerator targetPackage="test.dao" targetProject="src\main\java">
        <property name="enableSubPackages" value="true"/>
    </sqlMapGenerator>

    <!--設置生成Mapper接口 位置,這里采用XMLMAPPER 接口和XML 完全分離-->
    <javaClientGenerator type="XMLMAPPER" targetPackage="test.dao" targetProject="src\main\java">
        <property name="enableSubPackages" value="true"/>
    </javaClientGenerator>

    <!--匹配數據庫中所有的表-->
    <table tableName="%">
        <generatedKey column="id" sqlStatement="Mysql"/>
    </table>
</context>

4. 創建逆向工程的啟動類;

  package chen.mybatis;

  /**
  * @Author Chen
   * @Date 2020/3/15 20:26
   * 讀取MBG的配置生成代碼
 **/
public class Generator {
public static void main(String[] args) throws Exception{

    // 警告信息
    List<String> warnings = new ArrayList<String>();
    // 當生成代碼重復時,覆蓋原代碼
    boolean overwrite = true;

    // 讀取配置文件
    InputStream inputStream = Generator.class.getResourceAsStream("/generator/generatorConfig.xml");
    ConfigurationParser configurationParser = new ConfigurationParser(warnings);
    Configuration configuration = configurationParser.parseConfiguration(inputStream);
    inputStream.close();

    DefaultShellCallback callback = new DefaultShellCallback(overwrite);
    // 創建MBG
    MyBatisGenerator myBatisGenerator = new MyBatisGenerator(configuration,callback,warnings);

    // 執行生成代碼的邏輯
    myBatisGenerator.generate(null);
    // 輸出警告信息
    for (String warning : warnings) {
        System.out.println(warning);
    }
}
}

5.運行生成的代碼如下所示:

這樣就完成了代碼的生成工作

配置文件generatorConfig.xml的具體說明

了解配置文件的具體配置的內容,可以更加方便的適應自己的開發需求。下面就對generatorConfig.xml配置文件的具體信息進行說明:

  • 首要按照MBG 要求添加XML 文件頭:

這個文件頭中的mybatis-generator-config_1_0.dtd用來定義該配置文件中的標簽和屬性的。在文件頭之后需要寫上

 <generatorConfiguration> 
    ......
 <generatorConfiguration>
  • context 屬性 targetRuntime 設置為 MyBatis3Simple 防止生成與EXample相關的代碼和方法,如果需要Example的代碼,可以將其設置為 MyBatis3

  • context 屬性 defalutModelType設置為 flat,目的是每個表只生成一個實體類。

  • 注釋生成器commentGenerator,並且禁止在注釋中生成日期

  • jdbcConnection,配置連接數據庫的信息

  • javaModelGenerator 配置生成的包名。可以根據自己的需求進行修改,這里配置的包是test.model。 targetProject配置子啊src\main\java

  • sqlMapGenerator,配置生成mapper.xml文件的位置 這里配置在包test.dao下

  • javaClientGenerator Mapper接口的配置位置 這里配置在了test.dao下。

  • table 匹配數據庫中的表,可以單表匹配,只需要將tableName的值改為表名就可以了,這里采用的通配符% 匹配所有的表、,並且指定所有的表都有主鍵id, 因為連接的是mysql的數據庫,所以sqlStatement就設置為mysql.

參考書籍: 《mybatis從入門到精通》 劉增輝


免責聲明!

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



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