mybatis实战教程之九:mybatis 代码生成工具的使用

mybatis 应用程序,需要大量的配置文件,对于一个成百上千的数据库表来说,完全手工配置,这是一个很恐怖的工作量. 所以mybatis 官方也推出了一个mybatis代码生成工具的jar包. 今天花了一点时间,按照 mybatis generator 的doc 文档参考,初步配置出了一个可以使用的版本,我把源代码也提供下载,mybatis 代码生成工具,主要有一下功能:
1.生成pojo 与 数据库结构对应
2.如果有主键,能匹配主键
3.如果没有主键,可以用其他字段去匹配
4.动态select,update,delete 方法
5.自动生成接口(也就是以前的dao层)
6.自动生成sql mapper,增删改查各种语句配置,包括动态where语句配置
7.生成Example 例子供参考

下面介绍下详细过程

1. 创建测试工程,并配置mybatis代码生成jar包

这 里我们需要 mybatis-generator-core-1.3.2.jar,这个 jar 包. 将它拷贝到我们刚刚创建的 web工程的 WebContent/WEB-INF/lib  目录下.在这个目录下也放入 mysql 驱动jar包.因为用 mysql  做测试的

jar包见附件

2.在数据库中创建测试表
在mybatis数据库中创建 用来测试的cats表(如果没有mybatis这个数据库,要创建,这是基于前面这个系列文章而写的,已经有了mybatis 这个数据库)

CREATE TABLE `cats` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `pid` int(11) NOT NULL DEFAULT '0',
  `name` varchar(60) NOT NULL DEFAULT '',
  `desn` text NOT NULL,
  PRIMARY KEY (`id`),
  KEY `name` (`name`,`pid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

 3. 配置mybatis 代码生成工具的配置文件 
在创建的web工程中,创建相应的package 比如 :
com.handly.mybatis.dao 用来存放mybatis 接口对象.
com.handly.mybatis.mapper用来存放sql mapper对应的映射,sql语句等.
com.handly.mybatis.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:\workspace\zw-mybatis\WebRoot\WEB-INF\lib\mysql-connector-java-5.1.2-beta-bin.jar" />
<context id="yihaomen_mysql_tables" targetRuntime="MyBatis3">

	<!-- 为了防止生成的代码中有很多注释,比较难看,加入下面的配置控制 -->
	<commentGenerator>
		<property name="suppressAllComments" value="true" />
		<property name="suppressDate" value="true" />
	</commentGenerator>
	<!-- 注释控制完毕 -->

	<!-- 数据库连接 mis4_produce-->
	<jdbcConnection driverClass="com.mysql.jdbc.Driver"
		connectionURL="jdbc:mysql://127.0.0.1:3306/newwww_test?characterEncoding=utf8" userId="root" password="123456">
	</jdbcConnection>

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

	<!-- 数据表对应的model 层 -->
	<javaModelGenerator targetPackage="com.handly.mybatis.model" targetProject="src">
		<property name="enableSubPackages" value="true" />
		<property name="trimStrings" value="true" />
	</javaModelGenerator>

	<!-- sql mapper 隐射配置文件 -->
	<sqlMapGenerator targetPackage="com.handly.mybatis.mapper" targetProject="src">
		<property name="enableSubPackages" value="true" />
	</sqlMapGenerator>

	<!-- 在ibatis2 中是dao层,但在mybatis3中,其实就是mapper接口 -->
	<javaClientGenerator type="XMLMAPPER"
		targetPackage="com.handly.mybatis.dao" targetProject="src">
		<property name="enableSubPackages" value="true" />
	</javaClientGenerator>

	<!-- 要对那些数据表进行生成操作,必须要有一个. -->
	<table schema="mybatis" tableName="cats" domainObjectName="Cats"
		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 test.user;
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项目工程图应该如下



 

猜你喜欢

转载自handly-eye.iteye.com/blog/2316152