`
amosleaf
  • 浏览: 60252 次
  • 性别: 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所需jar包

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

    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压缩包。下载...

    mybatisgenerator.zip

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

    mybatis generator mysql

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

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

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

    eclipse mybatis generator插件及使用

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

    MyBatis Generator使用

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

    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 eclipse 插件 修改版【有中文注释】

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

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

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

    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