MyBatis Generator使用示例


一.MBG介紹

MyBatis Generator(MBG)是一個Mybatis的代碼生成器,它可以用來生成可以訪問(多個)表的基礎對象。MBG解決了對數據庫操作有最大影響的一些簡單的CRUD(插入,查詢,更新,刪除)操作。MBG會生成:匹配表結構的Java POJO;MyBatis兼容SQL映射XML文件;Mapper接口類

 

二.配置示例

MySQL數據庫創建用戶表(tb_user),建表語句

CREATE TABLE `spring`.`tb_user` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `username` VARCHAR(45) NOT NULL,
  `password` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`id`))
DEFAULT CHARACTER SET = utf8;

配置數據庫連接,創建resources/mybatis/db.properties

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://172.17.0.2:3306/spring
jdbc.username=root
jdbc.password=password

配置mybatis generator,創建resources/mybatis/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/db.properties"/>

    <!-- 指定數據庫驅動jar地址,可以pom.xml中設置 -->
    <!--<classPathEntry location="${user.home}/.m2/repository/mysql/mysql-connector-java/5.1.44/mysql-connector-java-5.1.44.jar"/>-->

    <!-- 配置環境
     defaultModelType:指定生成模型類型策略
     1.conditional:這是默認值,這個模型和下面的hierarchical類似,除了如果那個單獨的類將只包含一個字段,將不會生成一個單獨的類。 因此,如果一個
     表的主鍵只有一個字段,那么不會為該字段生成單獨的實體類,會將該字段合並到基本實體類中。
     2.flat:該模型為每一張表只生成一個實體類。這個實體類包含表中的所有字段。
     3.hierarchical:如果表有主鍵,那么該模型會產生一個單獨的主鍵實體類,如果表還有BLOB字段, 則會為表生成一個包含所有BLOB字段的單獨的實體類,然
     后為所有其他的字段生成一個單獨的實體類。 MBG會在所有生成的實體類之間維護一個繼承關系。 -->
    <context id="mysql" defaultModelType="flat">

        <!-- 是否取消注釋 -->
        <commentGenerator>
            <property name="suppressAllComments"  value="true"/>
        </commentGenerator>

        <!-- jdbc連接 -->
        <jdbcConnection driverClass="${jdbc.driverClassName}"
                        connectionURL="${jdbc.url}"
                        userId="${jdbc.username}" password="${jdbc.password}"/>

        <!-- 生成實體類 -->
        <javaModelGenerator targetPackage="com.learn.spring.server.model"
                            targetProject="src/main/java"/>

        <!-- 生成maper.xml文件 -->
        <sqlMapGenerator targetPackage="mybatis/mapper"
                         targetProject="src/main/resources"/>

        <!-- 生成dao接口 -->
        <javaClientGenerator targetPackage="com.learn.spring.server.dao"
                             targetProject="src/main/java" type="XMLMAPPER"/>

        <!-- 配置表信息,不生成幫助類examples-->
        <table schema="" tableName="tb_user" domainObjectName="UserDO"
               enableCountByExample="false" enableDeleteByExample="false"
               enableSelectByExample="false" enableUpdateByExample="false"/>
    </context>
</generatorConfiguration>

Maven配置MyBatis Generator,編輯pom.xml

        <plugins>
            <!-- MyBatis Generator -->
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.5</version>
                <!-- 指定jdbc驅動,可以generatorConfig.xml中設置 -->
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>5.1.44</version>
                    </dependency>
                </dependencies>
                <configuration>
                    <!-- 打印執行過程 -->
                    <verbose>true</verbose>
                    <!-- 允許覆蓋生成的文件 -->
                    <overwrite>true</overwrite>
                    <!-- 配置文件路徑 -->
                    <configurationFile>${basedir}/src/main/resources/mybatis/generatorConfig.xml</configurationFile>
                    <!-- 生成部分mapper,指定table名字 -->
                    <tableNames>
                        tb_user
                    </tableNames>
                </configuration>
            </plugin>
        </plugins>

 

三.執行驗證

執行mvn mybatis-generator:generate,生成UserDOMapper.java、UserDO.java、UserDOMapper.xml,插件執行成功。

 

四.<table>元素常用屬性

該元素至少要配置一個,可以配置多個,該元素用來配置要通過內省的表,只有配置的才會生成實體類和其他文件。
該元素有一個必選屬性

tableName:指定要生成的表名,可以使用SQL通配符匹配多個表,如:<table tableName="%" />

該元素包含多個可選屬性:

schema:數據庫的schema,可以使用SQL通配符匹配。設置后,生成SQL的表名會變成如schema.tableName的形式。
catalog:數據庫的catalog,如果設置了該值,生成SQL的表名會變成如catalog.tableName的形式。
alias:如果指定,這個值會用在生成的select查詢SQL的表的別名和列名上,列名會被別名為alias_actualColumnName這種模式。
domainObjectName:生成對象的基本名稱,如果沒有指定,MBG會自動根據表名來生成名稱。
enableXXX:XXX代表多種SQL方法,該屬性用來指定是否生成對應的XXX語句。
modelType:和<context>的defaultModelType含義一樣,這里可以針對表進行配置,這里的配置會覆蓋<context>的defaultModelType配置。
escapeWildcards:這個屬性表示當查詢列,是否對schema和表名中的SQL通配符('_' and '%')進行轉義,默認false。
delimitIdentifiers:是否給標識符增加**分隔符**,默認false。當catalog,schema或tableName中包含空白時,默認true。
delimitAllColumns:是否對所有列添加**分隔符**,默認false。

除了<property>子元素外,<table>還包含以下子元素

<generatedKey> (0個或1個):用來指定自動生成主鍵的屬性,如果指定這個元素,MBG在生成insert的SQL映射文件中插入一個<selectKey>元素。也就是數據庫自增后如果需要知道值,就用這個,這個是將自增結果回填到對象中。
<columnRenamingRule> (0個或1個):用來在MBG生成列之前,對列進行重命名。對於存在同一前綴的字段想在生成屬性名時去除前綴的表非常有用。
<columnOverride> (0個或多個):用來修改表中某個列的屬性(屬性名、數據類型),MBG會使用修改后的列來生成domain的屬性。
<ignoreColumn> (0個或多個):用來屏蔽不需要生成的列。


免責聲明!

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



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