1.前言

mybatis 应用程序,需要大量的配置文件,对于一个成百上千的数据库表来说,完全手工配置,这是一个很恐怖的工作量. 所以mybatis 官方也推出了一个mybatis代码生成工具的jar包. 

可以自行创建项目,添加mybatis-generator-core-1.3.2.jar,然后配置文件,生成代码,此种方式就是可以修改源代码,也利于对插件进行扩展或者修改,可以了解整个的流程。

也可以使用mybatis提供给eclipse的插件进行生成,优点就是方便。

此份文档将对两种方式都进行说明并提供源码,各位可以自行进行选择。

2.手动创建项目方式生成代码

2.1.下载jar包

l 下载地址:

http://code.google.com/p/mybatis/downloads/list?can=3&q=Product%3DGenerator

下载mybatis-generator-core-1.3.2-bundle.zip,解压后里面有jar包、源码和doc文档。

l 测试mysql 驱动下载:

http://dev.mysql.com/downloads/connector/j/这些jar包,我也会包含在源代码里面,可以参考。

 

2.2.在数据库中创建测试表

在mysql数据库中创建 用来测试的category表,语句如下:


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;



2.3.配置mybatis代码生成工具

2.3.1.创建packge

在创建的项目工程中,创建相应的package 比如 :
com.cyou.fz.dao 用来存放mybatis 接口对象.
com.cyou.fz.mybatis用来存放sql mapper对应的映射,sql语句等.
com.cyou.fz.po 用来存放与数据库对应的po。
在用mybatis 代码生成工具之前,这些目录必须先创建好,作为一个好的应用程序,这些目录的创建也是有规律的。

2.3.2.创建配置文件

根据mybatis代码生成工具文档,需要一个配置文件,这里命名为:configuration.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="H:\3.workspace\java\mabatis_codeGenerate\lib\mysql-connector-java-5.1.22-bin.jar" />

 

<context id="wq_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="123456">

</jdbcConnection>

 

<javaTypeResolver>

<property name="forceBigDecimals" value="false" />

</javaTypeResolver>

 

<!-- 数据表对应的po 层 -->

<javaModelGenerator targetPackage="com.cyou.fz.po"

targetProject="src">

<property name="enableSubPackages" value="true" />

<property name="trimStrings" value="true" />

</javaModelGenerator>

 

<!-- dao,xml配置文件 -->

<sqlMapGenerator targetPackage="com.cyou.fz.mybatis"

targetProject="src">

<property name="enableSubPackages" value="true" />

</sqlMapGenerator>

 

<!-- dao接口 -->

<javaClientGenerator type="XMLMAPPER"

targetPackage="com.cyou.fz.dao" 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>



到此为止,eclipse项目工程图应该如下:

2.3.3.生成代码


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;


/**
 * 程序代码主入口.
 * 
 * @author wuqing
 * 
 */
public class MainProc {


public static void main(String[] args) {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
String genCfg = "/configuration.xml";
File configFile = new File(MainProc.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();
}
}


}





运行MainProc类里的main方法,并刷新工程,你会发现 各自package 目录下已经响应生成了对应的文件,完全符合mybatis 规则,效果图如下:

2.3.4.注意事项

如果你想生成example之类的东西,需要在<table></table>里面去掉configuration.xml配置文件里面的:

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



这时,要用绝对路径才行. 另外configuration.xml  配置文件中targetProject 的配置也必须是绝对路径了。

3.eclipse插件形式生成代码

3.1.插件安装地址

http://mybatis.googlecode.com/svn/sub-projects/generator/trunk/eclipse/UpdateSite/

安装插件的过程就不说了~安装完后,eclipse中File-》new-》other中会发现多了mybatis选项说明插件安装成功。

 

3.2.插件使用

利用File-》new-》other-》生成配置文件(配置内容可以参考2.3.2的内容和3.3的注意事项,需要添加相应的数据库连接驱动包到编译路径)。

然后右键生成的配置文件,选择生成文件即可.

 

3.3.注意事项

如果是使用插件的情况下,配置文件中的<javaClientGenerator>标签的targetProject属性值必须包含工程名称,比如本人建的项目名称是AAA,代码目录为src,则该targetProject的值为“AAA/src”,如果是本人手动创建项目例子,由于执行的程序里面已经指定了项目路径,则targetProject只要“src”即可。