代碼生成工具的使用java
Mybatis 應用程序,須要大量的配置文件,對於一個成百上千的數據庫表來講,徹底手工配置,這是一個很恐怖的工做量. 因此 Mybatis 官方也推出了一個 Mybatis 代碼生成工具的 jar 包. 今天花了一點時間,按照 Mybatis generator 的 doc 文檔參考,初步配置出了一個可使用的版本,我把源代碼也提供下載,Mybatis 代碼生成工具,主要有一下功能:mysql
生成 pojo 與 數據庫結構對應 若是有主鍵,能匹配主鍵 若是沒有主鍵,能夠用其餘字段去匹配 動態 select,update,delete 方法 自動生成接口(也就是之前的 dao 層) 自動生成 sql mapper,增刪改查各類語句配置,包括動態 where 語句配置 生成 Example 例子供參考 下面介紹下詳細過程web
建立測試工程,並配置 Mybatis 代碼生成 jar 包sql
下載地址:http://code.google.com/p/mybatis/downloads/list?can=3&q=Product%3DGenerator數據庫
MySql 驅動下載:http://dev.mysql.com/downloads/connector/j/ 這些 jar 包,我也會包含在源代碼裏面,能夠在文章末尾處,下載源代碼,參考。api
用 Eclipse 創建一個 dynamic web project。mybatis
解壓下載後的 mybatis-generator-core-1.3.2-bundle.zip 文件,其中有兩個目錄:一個目錄是文檔目錄docs,主要介紹這個代碼生成工具如何使用,另外一個是 lib 目錄,裏面的內容主要是 jar 包,這裏咱們須要 mybatis-generator-core-1.3.2.jar,這個 jar 包. 將它拷貝到咱們剛剛建立的 web工程的 WebContent/WEB-INF/lib 目錄下.在這個目錄下也放入 MySql 驅動 jar 包。由於用 MySql 作測試的。app
在數據庫中建立測試表dom
在 Mybatis 數據庫中建立 用來測試的 category 表(若是沒有 Mybatis 這個數據庫,要建立,這是基於前面這個系列文章而寫的,已經有了 Mybatis 這個數據庫)eclipse
Drop TABLE IF EXISTS category
; Create TABLE category
( id
int(11) NOT NULL AUTO_INCREMENT, catname
varchar(50) NOT NULL, catdescription
varchar(200) DEFAULT NULL, PRIMARY KEY (id
) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 配置 Mybatis 代碼生成工具的配置文件
在建立的 Web 工程中,建立相應的 package 好比 :
com.yihaomen.inter 用來存放 Mybatis 接口對象。
com.yihaomen.mapper 用來存放 sql mapper 對應的映射,sql 語句等。
com.yihaomen.model 用來存放與數據庫對應的 model 。
在用 Mybatis 代碼生成工具以前,這些目錄必須先建立好,做爲一個好的應用程序,這些目錄的建立也是有規律的。
根據 Mybatis 代碼生成工具文檔,須要一個配置文件,這裏命名爲:mbgConfiguration.xml放在 src 目錄下. 配置文件內容以下:
<?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> <!-- 配置mysql 驅動jar包路徑.用了絕對路徑 --> <classPathEntry location="D:\Work\Java\eclipse\workspace\myBatisGenerator\WebContent\WEB-INF\lib\mysql-connector-java-5.1.22-bin.jar" /> <context id="yihaomen_mysql_tables" targetRuntime="MyBatis3"> <!-- 爲了防止生成的代碼中有不少註釋,比較難看,加入下面的配置控制 --> <commentGenerator> <property name="suppressAllComments" value="true" /> <property name="suppressDate" value="true" /> </commentGenerator> <!-- 註釋控制完畢 --> <!-- 數據庫鏈接 --> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1:3306/mybatis?characterEncoding=utf8" userId="root" password="password"> </jdbcConnection> <javaTypeResolver > <property name="forceBigDecimals" value="false" /> </javaTypeResolver> <!-- 數據表對應的model 層 --> <javaModelGenerator targetPackage="com.yihaomen.model" targetProject="src"> <property name="enableSubPackages" value="true" /> <property name="trimStrings" value="true" /> </javaModelGenerator> <!-- sql mapper 隱射配置文件 --> <sqlMapGenerator targetPackage="com.yihaomen.mapper" targetProject="src"> <property name="enableSubPackages" value="true" /> </sqlMapGenerator> <!-- 在ibatis2 中是dao層,但在mybatis3中,其實就是mapper接口 --> <javaClientGenerator type="XMLMAPPER" targetPackage="com.yihaomen.inter" targetProject="src"> <property name="enableSubPackages" value="true" /> </javaClientGenerator> <!-- 要對那些數據表進行生成操做,必需要有一個. --> <table schema="mybatis" tableName="category" domainObjectName="Category" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"> </table> </context> </generatorConfiguration>
用一個 main 方法來測試可否用 Mybatis 成生成剛剛建立的category表對應的 model,sql mapper 等內容。 建立一個 com.yihaomen.test 的 package ,並在此 package 下面創建一個測試的類 GenMain:
package com.yihaomen.test; import java.io.File; import java.io.IOException; import java.sql.SQLException; 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.exception.InvalidConfigurationException; import org.mybatis.generator.exception.XMLParserException; import org.mybatis.generator.internal.DefaultShellCallback; public class GenMain { public static void main(String[] args) { List<String> warnings = new ArrayList<String>(); boolean overwrite = true; String genCfg = "/mbgConfiguration.xml"; File configFile = new File(GenMain.class.getResource(genCfg).getFile()); ConfigurationParser cp = new ConfigurationParser(warnings); Configuration config = null; try { config = cp.parseConfiguration(configFile); } catch (IOException e) { e.printStackTrace(); } catch (XMLParserException e) { e.printStackTrace(); } DefaultShellCallback callback = new DefaultShellCallback(overwrite); MyBatisGenerator myBatisGenerator = null; try { myBatisGenerator = new MyBatisGenerator(config, callback, warnings); } catch (InvalidConfigurationException e) { e.printStackTrace(); } try { myBatisGenerator.generate(null); } catch (SQLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } }
到此爲止,Eclipse 項目工程圖應該以下:
運行測試的 main 方法,生成 Mybatis 相關代碼
運行 GenMain 類裏的 main方法,並刷新工程,你會發現 各自 package 目錄下已經響應生成了對應的文件,徹底符合 Mybatis 規則,效果圖以下:
注意事項
若是你想生成 example 之類的東西,須要在<table></table>裏面去掉
enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" 這部分配置,這是生成 example 而用的,通常來講對項目沒有用。
另外生成的 sql mapper 等,只是對單表的增刪改查,若是你有多表 join 操做,你就能夠手動配置,若是調用存儲過程,你也須要手工配置. 這時工做量已經少不少了。
若是你想用命令行方式處理,也是能夠的。
好比:
java -jar mybatis-generator-core-1.3.2.jar -mbgConfiguration.xm -overwrite 這時,要用絕對路徑才行. 另外 mbgConfiguration.xml 配置文件中 targetProject 的配置也必須是絕對路徑了。