代码生成工具的使用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 的配置也必须是绝对路径了。