mybatis实战教程(mybatis in action)之九: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包
下载地址:http://code.google.com/p/mybatis/downloads/list?can=3&q=Product%3DGenerator
mysql 驱动下载:http://dev.mysql.com/downloads/connector/j/
这些jar包,我也会包含在源代码里面,可以在文章末尾处,下载源代码,参考。

用 eclipse 建立一个dynamic web project。
解压下载后的 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 做测试的.

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

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;


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

根据mybatis代码生成工具文档,需要一个配置文件,这里命名为:mbgConfiguration.xml 放在src 目录下. 配置文件内容如下:




  
  
  

  
  
    
    
      
      
    
    
  
    
    
    

    
      
    
    
    
    
      
      
    
    
    
    
      
    
    
    
    
      
    
    
    
    

用一个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 warnings = new ArrayList();
		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项目工程图应该如下:


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


5.注意事项
如果你想生成example 之类的东西,需要在
里面去掉
 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 的配置也必须是绝对路径了。

代码下载:mybatis 代码生成工具

上一篇: python 日期相关的各种操作总结
下一篇: django admin框架使用系列之一:配置djang admin环境

Avatar

雪浴心原 评论于: 2020-08-31

已参考其他文章处理好了..
https://blog.csdn.net/blogzlh/article/details/81982980
<property name="enableSubPackages" value="false" />
false之后接口和model都好了,惭愧
[reply]: 问题解决了就好,另外有源码下载的。

Avatar

雪浴心原 评论于: 2020-08-31

现在遇到一个古怪的问题,接口包名以及model包名比配置的更长,会带一层schema.比如我配置的是com.xxx.biz.base.model.notice,最终生成的是com.xxx.biz.base.model.notice.kjmiddb.ContainerFlag.
已经在MybatisCustomPlugin extends PluginAdapter类中initialized()方法处理,introspectedTable.setMyBatis3JavaMapperType("com.xxx.biz.base.model.notice.ContainerFlag")强行指定解决了接口.
xml文件里面的sql语句强行判断表名将schema也去掉了
剩下的是model类无从下手...

Avatar

mophy 评论于: 2016-02-26

可以生成多表关联的代码不?

Avatar

hxbs 评论于: 2015-10-29

刷新下,src 目录找下,有的。

Avatar

buhuijava 评论于: 2015-04-24

[quote=王者归来]我配置了之后,代码什么都按你的方法,但是执行时不报错,但什么也没有生成。我用的数据库是oracle
 yihaomen 于 2015-03-12 09:29 PM 回复
我是用的mysql, 你可以先试下mysql 是否可行,我测试是可以的,然后你再试试oracle.
[/quote]

执行完后,refresh

Avatar

piaohualuoxv 评论于: 2015-04-08

执行时不报错,但什么也没有生成。
用命令行执行,看看warning

Avatar

王者归来 评论于: 2015-03-12

我配置了之后,代码什么都按你的方法,但是执行时不报错,但什么也没有生成。我用的数据库是oracle
[reply=yihaomen,2015-03-12 09:29 PM]我是用的mysql, 你可以先试下mysql 是否可行,我测试是可以的,然后你再试试oracle.[/reply]

Avatar

23 评论于: 2014-03-19

255
 评论 ( What Do You Think )
名称
邮箱
网址
评论
验证
   
 

 


  • 微信公众号

  • 我的微信

站点声明:

1、一号门博客CMS,由Python, MySQL, Nginx, Wsgi 强力驱动

2、部分文章来源于互联网, 若有侵权, 联系邮箱:summer@yihaomen.com, 同时欢迎大家注册用户,主动发布文章.

3、鄂ICP备14001754号-3, 鄂公网安备 42280202422812号