MBG有一個配置文件generatorConfig.xml。在裏面設置連接數據庫配置、javaModel、sqlMap、javaClient,table
<?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> <!-- 引入配置文件,可以通過${sqljdbcPath}取值 --> <properties url="file:///D:/workspaces/mybatisGen/bin/generatorConfig.properties"/> <!-- classPathEntry用於設置數據庫的JDBC驅動的jar包地址,location可以等於只包含了數據庫驅動的jar或zip路經,也可以是一個包含驅動的目錄 --> <classPathEntry location="c:/ojdbc14.jar" /> <!-- targetRuntime:代碼生成目標,默認是MyBatis3,可以是Ibatis2Java2或者Ibatis2Java5。生成對象兼容MyBatis版本3.0和更高版本,和JSE 5.0和更高版本 --> <!-- defaultModelType:用來定義生成模型類型策略。1.conditional 默認策略,爲每個表生成一個Model class;2.flat:將所有的表中生成一個Model class,即這個類將保存所有表中字段;3.hierarchical :如果表有一個主鍵,該模型將生成一個主鍵類,另一個類,用於容納任何BLOB列在表中,和另一個類,用於容納其餘的字段。這個是一個適當的繼承類之間的關係 --> <context id="DB2Tables" targetRuntime="MyBatis3" defaultModelType="conditional"> <commentGenerator> <!-- 是否去除自動生成的註釋,默認false,true:去除;false:不去除 --> <property name="suppressAllComments" value="true" /> <!-- 指定在生成的註釋是否將包括時間戳,默認是false --> <property name="suppressDate" value="true" /> </commentGenerator> <!-- 數據庫連接的信息:驅動類、連接地址、用戶名、密碼 --> <jdbcConnection driverClass="oracle.jdbc.driver.OracleDriver" connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:ZFGJJ" userId="hr" password="hr"> </jdbcConnection> <!-- 解決數字轉換問題 --> <javaTypeResolver> <!-- 只有一個屬於forceBigDecimals,默認false。如果字段精確超過0,生成BigDecimal 如果字段精確是0,總長度10-18生成Long; 如果字段精確是0,總長5-9生成Integer; 如果字段精確是0,總長小於5生成Short; 如果forceBigDecimals爲true,統一生成BigDecimal --> <property name="forceBigDecimals" value="false" /> </javaTypeResolver> <!-- Model生成配置 targetPackage:生成包路徑,自動生成目錄。targetProject:項目路經,可以絕對路徑或者相對路徑。 --> <javaModelGenerator targetPackage="test.model" targetProject="D:\Workspace\mylearn\mybatis\"> <!-- enableSubPackages:是否讓schema作爲包的後綴 --> <property name="enableSubPackages" value="true" /> <!-- 從數據庫返回的值被清理前後的空格 --> <property name="trimStrings" value="true" /> </javaModelGenerator> <!-- sqlMap配置 --> <sqlMapGenerator targetPackage="test.sqlmap" targetProject="D:\Workspace\mylearn\mybatis\"> <property name="enableSubPackages" value="true" /> </sqlMapGenerator> <!-- DAO接口的生成 --> <javaClientGenerator type="XMLMAPPER" targetPackage="test.dao" targetProject="D:\Workspace\mylearn\mybatis\"> <property name="enableSubPackages" value="true" /> </javaClientGenerator> <!-- tableName:用於自動生成代碼的數據庫表;domainObjectName:對應於數據庫表的javaBean類名,如果未指定自動基於表名生成 --> <!-- table其他屬性:enableCountByExample="false";enableUpdateByExample="false";enableDeleteByExample="false";enableSelectByExample="false";selectByExampleQueryId="false";schema即爲數據庫名, tableName爲對應的數據庫表, domainObjectName是要生成的實體類 --> <table schema="hr" tableName="countries" domainObjectName="Customer"> <!-- 忽略字段 --> <ignoreColumn column="columnName" /> <!-- 無論字段是什麼類型,生成的類屬性都是varchar --> <columnOverride column="columnName" jdbcType="VARCHAR" /> <!-- 修改數據庫列名映射的javabean屬性名 --> <columnOverride column="oldColumnName" property="propertyName" /> <!-- 主鍵生成 如果用了這個 generatedKey ,MBG將在sqlmpper.xml裏生成一個 selectKey元素在用在<insert>元素裏 。 --> <generatedKey column="columnName" sqlStatement="JDBC" identity="true" /> <generatedKey column="ID" sqlStatement="MySql" identity="true" /> <!-- javabean繼承的父類 --> <property name="rootClass" value="com.xxx.commons.entity.IdEntity"/> <property name="useActualColumnNames" value="true"/> </table> </context> </generatorConfiguration>
<javaModelGenerator>元素用於定義Java模型生成的屬性
支持的屬性:
constructorBased:默認值是false
此屬性用於選擇是否MyBatis生成器將生成一個類的構造函數,它接受一個值類中的每個字段。同時,SQL結果地圖將建成投入使用構造函數而不是“setter”爲每個字段。這個屬性是隻適用於MyBatis3和將被忽略了iBATIS2。這個屬性可以被相應的屬性在< table >元素。
immutable:默認爲false
不可變,此屬性用於選擇是否MyBatis生成器將產生不可變模型類——這意味着類不會有“setter”方法和構造函數會接受類中每個字段的值。
trimStrings:默認值是false。
此屬性用於選擇是否MyBatis生成器添加代碼來修剪的白色空間從字符字段從數據庫返回的。這可以是很有用的,如果您的數據庫將數據存儲在字符字段而不是VARCHAR字段。當真正的,MyBatis生成器將插入代碼來削減字符字段。
<javaClientGenerator>元素是用來定義Java客戶機代碼生成器的屬性
Java客戶機生成器用來建立Java接口和類,以便可以方便地使用生成的Java模型和XML映射文件。
對於iBATIS2目標環境,這些生成的對象採用的形式DAO接口和實現類。
對於MyBatis,生成的對象採用的形式mapper接口。
type屬性:
如果targetRuntime爲MyBatis3
XMLMAPPER:生成的對象將Java接口MyBatis 3。xmapper基礎設施接口將會依賴生成的XML映射器文件。一般都是使用這個XMLMAPPER
<table>元素用於選擇數據庫中的一個表。選擇的表將導致生成以下對象爲每個表
tableName:必須配置 ,指定表的名稱
domainObjectName:生成javabean對象的基本名稱。如果未指定,MBG將自動基於表名生成。這個名字(無論是在這裏指定,或自動生成)將被用來作爲域類名和DAO類的名字。
enableInsert:是否生成插入語句。默認是true
enableSelectByPrimaryKey:是否通過主鍵生成選擇語句。不管是否有這種設置,如果該表沒有一個主鍵將不會生成。
enableUpdateByPrimaryKey:是否通過主鍵生成更新語句。如果該表沒有主鍵,不管是否設置該屬性,語句將不會生成。
enableDeleteByPrimaryKey:是否通過主鍵生成刪除語句。如果該表沒有主鍵,不管這種設置該屬性,語句將不會生成。
enableDeleteByExample:是否通過example對象生成刪除語句。這個聲明使得許多不同的動態刪除在運行時生成。
enableCountByExample:是否通過example對象生成計算行數語句。該語句將返回一個表中的行數相匹配的example。
enableUpdateByExample:是否通過example對象生成更新語句。該語句將更新一個表中相匹配的記錄。
selectByPrimaryKeyQueryId:這個值將被添加到選擇列表中選擇通過主鍵的聲明在本表格:“' <值>作爲QUERYID”。這可以用於識別查詢在DBA在運行時跟蹤工具。如果你使用這樣的價值,你應該指定一個唯一的id爲每個不同的查詢生成MBG。
selectByExampleQueryId:這個值將被添加到選擇列表中選擇通過例子的聲明在本表格:“' <值>作爲QUERYID”。這可以用於識別查詢在DBA在運行時跟蹤工具。如果你使用這樣的價值,你應該指定一個唯一的id爲每個不同的查詢生成MBG。
enableSelectByExample:是否應該生成通過example的選擇語句。這個聲明使得許多不同的動態查詢是在運行時生成。
MBG工具有5種方式運行,1、命令行方式,2、ant方式,3、Maven方式,4、基於xml配置的java方式,5、基於java配置的java方式。
1、運行cmd->java - jar jar包的文件路徑 -configfile generator.xml的文件路徑 -overwrite 命令。
如下:
java -jar E:\Websoft\mybaits\mybatis-generator-core-1.3.2\lib\mybatis-generator-core-1.3.2.jar -configfile E:\WebWorkSpace\workspace_js\downAttachdemo\src\com\mochasoft\down\generator.xml -overwrite
成功時輸出:MyBatis Generator finished successfully.
2、 Java生成
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;//是否覆蓋原來的文件
File configFile = new File("generatorConfig.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);
3、ant
- <?xml version="1.0"?>
- <project default="genfiles" basedir=".">
- <path id="build">
- <fileset dir="${basedir}\web\WEB-INF\lib">
- <include name="*.jar" />
- </fileset>
- </path>
- <property name="generated.source.dir" value="${basedir}" />
- <target name="genfiles" description="Generate the files">
- <taskdef name="mbgenerator" classname="org.mybatis.generator.ant.GeneratorAntTask">
- <classpath refid="build" />
- </taskdef>
- <!--configfile:填你MBG文件名 -->
- <mbgenerator overwrite="true" configfile="generatorConfig.xml" verbose="false">
- <propertyset>
- <propertyref name="generated.source.dir" />
- </propertyset>
- </mbgenerator>
- </target>
- </project>