`
amosleaf
  • 浏览: 60003 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Mybatis generator 使用

阅读更多

声明:本文感谢satellite同学。

====================================

先看Generator,另外generator启动方式还有命令行 和 ant 方式等。

package mybatis.generator;

import java.io.File;
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.internal.DefaultShellCallback;

public class Generator {

	public static void main(String[] args) {
		List<String> warnings = new ArrayList<String>();
		ConfigurationParser cp = new ConfigurationParser(warnings);

		boolean overwrite = true;
		//staticTableConfig.xml,dynamicTableConfig.xml
		File configFile = new File(
				"E:/javaspace/svnspace/WCM5.0/PublishServer/tools/generator/dynamicTableConfig.xml");		
		try {
			Configuration config = cp.parseConfiguration(configFile);
			DefaultShellCallback callback = new DefaultShellCallback(overwrite);
			MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,
					callback, warnings);
			myBatisGenerator.generate(null);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

 接下来看Plugin,Plugin用于生成的Java代码改造 和 生成的sql改造,具体请参见Mybatis 文档。

参考链接:

http://www.mybatis.org/
http://www.mybatis.org/java.html
http://code.google.com/p/mybatis

 

package mybatis.generator;

import java.util.List;

import org.mybatis.generator.api.CommentGenerator;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.PluginAdapter;
import org.mybatis.generator.api.dom.java.Field;
import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
import org.mybatis.generator.api.dom.java.Interface;
import org.mybatis.generator.api.dom.java.JavaVisibility;
import org.mybatis.generator.api.dom.java.Method;
import org.mybatis.generator.api.dom.java.Parameter;
import org.mybatis.generator.api.dom.java.TopLevelClass;
import org.mybatis.generator.api.dom.xml.Attribute;
import org.mybatis.generator.api.dom.xml.Element;
import org.mybatis.generator.api.dom.xml.TextElement;
import org.mybatis.generator.api.dom.xml.XmlElement;

public class MyPlugin extends PluginAdapter {

	@Override
	public boolean validate(List<String> arg0) {
		return true;
	}

	@Override
	public boolean sqlMapSelectByPrimaryKeyElementGenerated(XmlElement element,
			IntrospectedTable introspectedTable) {
		element.getAttributes().remove(2);
		element.addAttribute(new Attribute("parameterType", introspectedTable
				.getBaseRecordType()));
		return super.sqlMapSelectByPrimaryKeyElementGenerated(element,
				introspectedTable);
	}

	@Override
	public boolean sqlMapDeleteByPrimaryKeyElementGenerated(XmlElement element,
			IntrospectedTable introspectedTable) {
		element.getAttributes().remove(1);
		element.addAttribute(new Attribute("parameterType", introspectedTable
				.getBaseRecordType()));
		return super.sqlMapDeleteByPrimaryKeyElementGenerated(element,
				introspectedTable);
	}

	@Override
	public boolean clientDeleteByPrimaryKeyMethodGenerated(Method method,
			Interface interfaze, IntrospectedTable introspectedTable) {
		method.getParameters().remove(0);
		String type = introspectedTable.getBaseRecordType();
		method.addParameter(new Parameter(new FullyQualifiedJavaType(type),
				type.substring(type.lastIndexOf(".") + 1).toLowerCase()));
		return super.clientDeleteByPrimaryKeyMethodGenerated(method, interfaze,
				introspectedTable);
	}

	@Override
	public boolean clientSelectByPrimaryKeyMethodGenerated(Method method,
			Interface interfaze, IntrospectedTable introspectedTable) {
		method.getParameters().remove(0);
		String type = introspectedTable.getBaseRecordType();
		method.addParameter(new Parameter(new FullyQualifiedJavaType(type),
				type.substring(type.lastIndexOf(".") + 1).toLowerCase()));
		return super.clientSelectByPrimaryKeyMethodGenerated(method, interfaze,
				introspectedTable);
	}

	@Override
	public boolean sqlMapUpdateByExampleSelectiveElementGenerated(
			XmlElement element, IntrospectedTable introspectedTable) {
		element.getElements().remove(0);
		StringBuilder sb = new StringBuilder();
		sb.append("update ");
		sb.append(introspectedTable
				.getAliasedFullyQualifiedTableNameAtRuntime().replace(
						"${tablesite}", "${record.tablesite}"));
		element.addElement(0, new TextElement(sb.toString()));
		return super.sqlMapUpdateByExampleSelectiveElementGenerated(element,
				introspectedTable);
	}

	@Override
	public boolean sqlMapUpdateByExampleWithoutBLOBsElementGenerated(
			XmlElement element, IntrospectedTable introspectedTable) {
		element.getElements().remove(0);
		StringBuilder sb = new StringBuilder();
		sb.append("update ");
		sb.append(introspectedTable
				.getAliasedFullyQualifiedTableNameAtRuntime().replace(
						"${tablesite}", "${record.tablesite}"));
		element.addElement(0, new TextElement(sb.toString()));
		return super.sqlMapUpdateByExampleWithoutBLOBsElementGenerated(element,
				introspectedTable);
	}

	@Override
	public boolean modelBaseRecordClassGenerated(TopLevelClass topLevelClass,
			IntrospectedTable introspectedTable) {
		addTableSite(topLevelClass, introspectedTable, "tablesite");
		return super.modelBaseRecordClassGenerated(topLevelClass,
				introspectedTable);
	}

	@Override
	public boolean modelExampleClassGenerated(TopLevelClass topLevelClass,
			IntrospectedTable introspectedTable) {
		addTableSite(topLevelClass, introspectedTable, "tablesite");
		return super.modelExampleClassGenerated(topLevelClass,
				introspectedTable);
	}

	private void addTableSite(TopLevelClass topLevelClass,
			IntrospectedTable introspectedTable, String name) {
		CommentGenerator commentGenerator = context.getCommentGenerator();
		Field field = new Field();
		field.setVisibility(JavaVisibility.PROTECTED);
		field.setType(FullyQualifiedJavaType.getIntInstance());
		field.setName(name);
		field.setInitializationString("-1");
		commentGenerator.addFieldComment(field, introspectedTable);
		topLevelClass.addField(field);
		char c = name.charAt(0);
		String camel = Character.toUpperCase(c) + name.substring(1);
		Method method = new Method();
		method.setVisibility(JavaVisibility.PUBLIC);
		method.setName("set" + camel);
		method.addParameter(new Parameter(FullyQualifiedJavaType
				.getIntInstance(), name));
		method.addBodyLine("this." + name + "=" + name + ";");
		commentGenerator.addGeneralMethodComment(method, introspectedTable);
		topLevelClass.addMethod(method);
		method = new Method();
		method.setVisibility(JavaVisibility.PUBLIC);
		method.setReturnType(FullyQualifiedJavaType.getIntInstance());
		method.setName("get" + camel);
		method.addBodyLine("return " + name + ";");
		commentGenerator.addGeneralMethodComment(method, introspectedTable);
		topLevelClass.addMethod(method);
	}

	@Override
	public boolean sqlMapBaseColumnListElementGenerated(XmlElement element,
			IntrospectedTable introspectedTable) {
		List<Element> elist = element.getElements();
		int size = elist.size();
		Element e = elist.get(size - 1);
		String str = e.getFormattedContent(0);
		e = new TextElement(str + ", ${tablesite} AS tablesite");
		elist.remove(size - 1);
		elist.add(size - 1, e);
		return super.sqlMapBaseColumnListElementGenerated(element,
				introspectedTable);
	}

	@Override
	public boolean sqlMapResultMapWithoutBLOBsElementGenerated(
			XmlElement element, IntrospectedTable introspectedTable) {
		List<Element> elist = element.getElements();
		XmlElement xe = new XmlElement("result");
		xe.addAttribute(new Attribute("column", "tablesite"));
		xe.addAttribute(new Attribute("property", "tablesite"));
		xe.addAttribute(new Attribute("jdbcType", "INTEGER"));
		elist.add(xe);
		return super.sqlMapResultMapWithoutBLOBsElementGenerated(element,
				introspectedTable);
	}

	@Override
	public boolean sqlMapResultMapWithBLOBsElementGenerated(XmlElement element,
			IntrospectedTable introspectedTable) {
		List<Element> elist = element.getElements();
		XmlElement xe = new XmlElement("result");
		xe.addAttribute(new Attribute("column", "tablesite"));
		xe.addAttribute(new Attribute("property", "tablesite"));
		xe.addAttribute(new Attribute("jdbcType", "INTEGER"));
		elist.add(xe);
		return super.sqlMapResultMapWithoutBLOBsElementGenerated(element,
				introspectedTable);
	}
	
	
}

 

另外配置文件,请参见附件,包括静态表 和 动态表两种。

分享到:
评论
1 楼 caiyunlong520 2012-04-23  

求大侠帮助解决一个小问题:
我在用mybatis generator 自动生成代码的时候怎样指定table中的PrimaryKey主键
并且让生成的SqlMapper文件中有
selectByPrimaryKeyQueryId
enableSelectByPrimaryKey
enableDeleteByPrimaryKey
这几个方法,我的表标签如下:
  <table tableName="t_ep_ent_circlewarn_his" domainObjectName="CircleWarnBean"
         enableCountByExample="false" enableUpdateByExample="false" 
          enableDeleteByExample="false" enableSelectByExample="false" 
         selectByExampleQueryId="false" selectByPrimaryKeyQueryId="true"
         enableSelectByPrimaryKey="true" enableDeleteByPrimaryKey="true"
         delimitIdentifiers="warnid"
         >
</table>

相关推荐

    mybatis_generator使用手册

    MyBatis Generator 使用手册 MyBatis Generator 是 MyBatis 的代码生成工具,旨在通过反射数据库表结构生成对应的Java代码,简化开发过程,提高开发效率。本手册将指导用户如何使用 MyBatis Generator 生成代码,...

    Mybatis Generator使用说明

    ### Mybatis Generator使用说明 #### 一、简介 Mybatis Generator 是一款强大的代码生成工具,它可以根据数据库表结构自动生成相应的 Java 实体类、Mapper 接口、XML 映射文件等,极大地提高了开发效率,减少了...

    mybatis generator使用例子

    下面将详细介绍如何使用MyBatis Generator以及相关知识点。 **一、MyBatis Generator介绍** MyBatis Generator是MyBatis框架的一个插件,它可以根据数据库表信息自动创建Mapper接口、Mapper XML文件、实体类和DAO...

    IDEA中mybatis generator使用.docx

    在【标题】"IDEA中mybatis generator使用.docx"中,主要涉及的是如何在项目中配置和使用MyBatis Generator。首先,我们需要在项目的`pom.xml`文件中添加MBG的插件依赖,这部分已经在【描述】中给出: ```xml ...

    mybatis generator

    Mybatis Generator是一款强大的工具,它为开发者自动化生成Mybatis的Mapper接口、XML映射文件以及实体类,大大减轻了在使用Mybatis时手动编写这些文件的工作负担。在Java开发环境中,ORM(Object-Relational Mapping)...

    mybatis generator Myeclipse插件

    文件名"mybatisgenerator_myeclipse10-sql-oracle"可能表示这是一个适用于Myeclipse 10版本的Mybatis Generator插件,并且重点支持Oracle数据库的配置和使用。"sql"可能代表SQL数据库的通用性,而"oracle"则强调了对...

    mybatis generator的运用

    MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, null); myBatisGenerator.generate(null, generatedJavaFiles, generatedXmlFiles); } } ``` 运行此Java类,MBG将根据配置文件生成...

    mybatis generator使用方法

    接下来将详细介绍MyBatis Generator的使用方法。 首先,为了在项目中使用MyBatis Generator,你需要添加相应的依赖包到你的项目中。通过Maven添加依赖的方式,可以在项目的pom.xml文件中加入以下配置: ```xml ...

    mybatis generator eclipse插件的安装

    下面我们将详细介绍如何在Eclipse中安装和使用MyBatis Generator插件。 首先,我们需要获取MBG的插件文件。通常,你可以从官方网站或者第三方资源站点下载到`mybatis-generator-eclipse-plugin`的zip压缩包。下载...

    mybatis Generator所需jar包

    4. **DOM4J库**:dom4j-1.6.1.jar是一个用于处理XML文档的Java库,MyBatis Generator使用它来解析和生成XML配置文件。 5. **Jackson库**:如果你需要JSON支持,可能还需要包括jackson-databind.jar。Jackson是一个...

    mybatisgenerator.zip

    mybatis generator 是根据已创建的数据库数据表生成相映的 entity ,dao ,daoImpl ,sqlmap。 标签:mybatis

    mybatis generator mysql

    3. **运行MBG**:在Java代码中,通过调用`org.mybatis.generator.api.MyBatisGenerator`类的静态方法来执行生成过程。也可以通过命令行执行MBG,前提是配置文件和JAR文件在同一目录下。 4. **生成的代码**:MBG会...

    eclipse mybatis generator插件及使用

    Eclipse MyBatis Generator插件是一款强大的自动化代码生成工具,它极大地简化了开发过程中与数据库交互的代码编写工作。MyBatis Generator可以帮助开发者自动生成Java实体类、Mapper接口及XML配置文件,从而节省了...

    MyBatis Generator使用

    ### MyBatis Generator 使用详解 #### 一、概述 MyBatis Generator 是一个强大的代码生成工具,能够根据数据库表结构自动生成对应的 DAO 接口、Mapper 文件以及实体类(POJO),大大减轻了开发人员的手动编码工作...

    mybatis generator 使用方法教程(生成带注释的实体类)

    MyBatis Generator 使用方法教程(生成带注释的实体类) MyBatis Generator 是一个强大的工具,能够根据数据库表自动生成 Java 实体类、DAO、Mapper.xml 等文件,从而提高开发效率和减少开发时间。在本教程中,我们...

    mybatis-generator-core-1.3.7-API文档-中文版.zip

    赠送jar包:mybatis-generator-core-1.3.7.jar; 赠送原API文档:mybatis-generator-core-1.3.7-javadoc.jar; 赠送源代码:mybatis-generator-core-1.3.7-sources.jar; 赠送Maven依赖信息文件:mybatis-generator-...

    MyBatis Generator + PostgreSQL 逆向工程单独使用包及使用说明.rar

    mybatis-generator版本:mybatis-generator-core-1.3.7.jar 关于逆向工程自动生成dao层代码的功能,网上很多介绍的都是mysql版本的,而且介绍的都是在开发环境idea或eclipse中怎么使用,这里整理的是PostgerSQL版本...

    MyBatis Generator eclipse 插件 修改版【有中文注释】

    eclipse 插件,使用MyBatis Generator 可自动生成数据库对应的bean(有中文注释),mapper.xml和mapper dao 接口文件,可直接使用查询数据库,此插件在eclipse mars.2 版本下亲测可用,

    eclipse Mybatis generator 1.3.7 中文注释 插件核心包

    1、这是Eclipse MyBatis generator 1.3.7插件的核心包 2、首先到Eclipse中下载 MyBatis Generator 1.3.7插件,下载完按步骤进行... 6、此jar包也适用于MyBatis generator 1.3.6版本 替换步骤同上 (亲测绝对可以使用)

    MybatisGenerator代码生成器(可查询指定字段)

    MybatisGenerator本身是没有提供查询指定字段的,例如数据库有5个字段,我想查询其中3个...经过研究MybatisGenerator实现原理,在保证原有功能的基础上,实现了生成查询指定字段的相关方法,下载即可使用。eclipse!

Global site tag (gtag.js) - Google Analytics