MyBatis Generator(MBG)是一個Mybatis的代碼生成器,它能夠用來生成能夠訪問(多個)表的基礎對象。MBG解決了對數據庫操做有最大影響的一些簡單的CRUD(插入,查詢,更新,刪除)操做。MyBatis Generator 會生成:匹配表結構的Java POJO;MyBatis兼容SQL映射XML文件;Mapper接口類。java
MySQL數據庫建立用戶表(tb_user),建表語句mysql
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.propertiesspring
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.xmlsql
<?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,插件執行成功。mybatis
該元素至少要配置一個,能夠配置多個,該元素用來配置要經過內省的表,只有配置的纔會生成實體類和其餘文件。
該元素有一個必選屬性:app
tableName:指定要生成的表名,可使用SQL通配符匹配多個表,如:<table tableName="%" />dom
該元素包含多個可選屬性:maven
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。ide
除了<property>子元素外,<table>還包含如下子元素:
<generatedKey> (0個或1個):用來指定自動生成主鍵的屬性,若是指定這個元素,MBG在生成insert的SQL映射文件中插入一個<selectKey>元素。也就是數據庫自增後若是須要知道值,就用這個,這個是將自增結果回填到對象中。 <columnRenamingRule> (0個或1個):用來在MBG生成列以前,對列進行重命名。對於存在同一前綴的字段想在生成屬性名時去除前綴的表很是有用。 <columnOverride> (0個或多個):用來修改表中某個列的屬性(屬性名、數據類型),MBG會使用修改後的列來生成domain的屬性。 <ignoreColumn> (0個或多個):用來屏蔽不須要生成的列。