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);
	}
	
	
}

 

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

你可能感兴趣的:(Mybatis generator 使用)