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”即可。