声明:本文感谢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使用说明
这是一个简单的mybatis generator 工具的使用例子,内含generator配置文件 mysql 驱动 以及mybatis generator jar包
MyBatis Generator使用
mybatis generator 是根据已创建的数据库数据表生成相映的 entity ,dao ,daoImpl ,sqlmap。 标签:mybatis
通过mybatis generator工具直接生成mybatis所对应的mapper文件以及sql语句
mybatis generator eclipse插件的安装
mybatis generator相关资源 包含配置文件,jar包等 补充
赠送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 自动生成 bean xml mapper 个人总结,比找杂七杂八博客好多了
eclipse 插件,使用MyBatis Generator 可自动生成数据库对应的bean(有中文注释),mapper.xml和mapper dao 接口文件,可直接使用查询数据库,此插件在eclipse mars.2 版本下亲测可用,
mybatis-generator版本:mybatis-generator-core-1.3.7.jar 关于逆向工程自动生成dao层代码的功能,网上很多介绍的都是mysql版本的,而且介绍的都是在开发环境idea或eclipse中怎么使用,这里整理的是PostgerSQL版本...
myBatisGenerator = new MyBatisGenerator(config, callback, warnings); } catch (InvalidConfigurationException e) { e.printStackTrace(); } try { myBatisGenerator.generate(null); } catch ...
Mybatis属于半自动ORM,在使用这个框架中,工作量最大的就是书写Mapping的映射文件,由于手动书写很容易出错,Mybatis-Generator可以用来帮我们自动生成这些文件。
1、这是Eclipse MyBatis generator 1.3.7插件的核心包 2、首先到Eclipse中下载 MyBatis Generator 1.3.7插件,下载完按步骤进行... 6、此jar包也适用于MyBatis generator 1.3.6版本 替换步骤同上 (亲测绝对可以使用)
MybatisGenerator本身是没有提供查询指定字段的,例如数据库有5个字段,我想查询其中3个...经过研究MybatisGenerator实现原理,在保证原有功能的基础上,实现了生成查询指定字段的相关方法,下载即可使用。eclipse!
eclipse mybatis generator插件
MyBatis Generator自动创建代码文件和jar包,参考http://blog.csdn.net/zhshulin/article/details/23912615
mybatis generator,亲测可以使用,使用方法百度mybatis generator使用即可。
使用MyBatis Generator生成DAO
Mybatis Generator 结合Lombok使用,不生成get,set,生成数据库注释 自定定义 MODEL 类 数据库 使用提前:项目相关的jar 都引用了, 资源最组要是要有 mybatis-generator-core jar包 下载下来, 1 如果不改直接...