扩展MyBatis Generator

MyBatis Generator(MBG)是专为扩展性设计的。所有的代码生成使用Java和XML元素简单的DOM表示执行。

Java的DOM包含在org.mybatis.generator.api.dom.java

该XML DOM包含在org.mybatis.generator.api.dom.xml

这些类不足以实现每个可以想象到的代码生成的可能性,但是用于生成简单到中等复杂Java和XML代码相当有用的。

在配置文件中使用的选项,您可以提供自己的许多关键代码生成接口的实现。您也可以继承任何提供的实现来提供定制的行为。这个页面将介绍可用的公共API,并提供进一步调查源代码的指示。如果您对如何扩展MBG有任何的困难,您可以在支持的邮件列表mybatis-user@googlegroups.com 发送信息。

扩展与插入

虽然本网页上显示了许多不同的扩展点,在大多数情况下,这将是很容易通过使用插件扩展MBG。查阅开发插件的参考页面了解更多信息。

代码生成的主要扩展点是org.mybatis.generator.api.IntrospectedTable 。实现一个代码生成器是一个有意义的任务,只有当您想要完全取代MBG的代码生成活动时才考虑。自从Abator的原始版本以来,很少出现有增强请求无法通过一个插件来处理的。

扩展点

MBG提供了许多不同的扩展点。以下部分列出扩展MBG的不同方法,并描述了可以实现与不同的扩展活动的类型。如果您需要一些了解不同的选择的帮助,您可以自由的在用户邮件列表上询问问题。

org.mybatis.generator.api.IntrospectedTable

IntrospectedTable是一个可以扩展用于提供和MBG供给的版本不同的代码生成的抽象类。这种实现的一个很好的例子是基于一个FreeMarker的或Velocity模板的实现。在大多数其他情况下,编写插件是一个更好途径。

如果您选择扩展这个类,您必须提供代码来生成Java和XML文件。您可以选择生成的这些文件的技术。IntrospectedTable基础类持有的一个org.mybatis.generator.internal.rules.Rules实例可查询许多用于代码生成的规则。

MBG提供反射表的几种实现。实现基于<context>元素的targetRuntime属性值。在大多数情况下,继承下面的一个内置的扩展比从头开始创建一个实现会容易很多。下表显示了内置的实现:

TargetRuntime 实现
MyBatis3(默认) org.mybatis.generator.codegen.mybatis3.IntrospectedTableMyBatis3Impl
Ibatis2Java2 org.mybatis.generator.codegen.ibatis2.IntrospectedTableIbatis2Java2Impl
Ibatis2Java5 org.mybatis.generator.codegen.ibatis2.IntrospectedTableIbatis2Java5Impl

如果您选择实现此扩展点,指定<context>元素的targetRuntime属性为您的实现类的完全限定类名。

org.mybatis.generator.api.IntrospectedColumn

IntrospectedColumn是一个包含列的信息的类,因为它是一个从数据库返回的元数据类。在某些罕见的情况下,可能需要重写这个类来提供自己的 - 特别是如果您创建了一套新的代码生成器。

如果您选择实施此扩展点,指定<context>元素的introspectedColumnImpl属性为您实现类的完全限定类名。

org.mybatis.generator.api.JavaTypeResolver

MBG在内省数据库时调用这个接口的方法将JDBC类型映射到Java类型。这个接口的默认实现org.mybatis.generator.internal.types.JavaTypeResolverDefaultImpl 。您可以提供自己的实现,并且默认的实现已被设计为可扩展。

提供您自己的实现,在XML配置中指定全限定的类名:

    <javaTypeResolver type="mypackage.MyImplementation“> ...</ javaTypeResolver>

org.mybatis.generator.api.ShellCallback

MBG调用这个接口的方法来执行功能,它不能自己做。最重要的功能是:

  • 翻译 项​​目/包 到一个目录结构
  • 合并事件中的Java源文件同名的现有的Java文件/程序包是否存在。

这个接口的默认实现org.mybatis.generator.internal.DefaultShellCallback 。默认实现简单的将项目和包连接在一起,如果需要则创建必要的包目录。默认的实现不支持Java文件的合并,并将覆盖或忽略文件。

您可以提供自己的实现。如果您想将MBG集成到一些其他的环境中,这将是最重要的一个需要编写的类。例如,Eclipse插件提供的实现在Eclipse环境中运行时,它支持Java文件的合并。

提供您自己的实现,提供有关构造函数的接口org.mybatis.generator.api.MyBatisGenerator的实例对象。这个不能通过XML来配置。如果您提供自己的实现此接口的话,我们假设您也提供了一些附加的代码(如一个新的Ant任务)来运行您的实现。

org.mybatis.generator.api.ProgressCallback

MBG调用这个接口的方法在文件的生成(长时间运行的进程)中报告进度。这个接口的默认实现org.mybatis.generator.internal.NullProgressCallback它只是忽略所有的进度消息。您可以提供此接口的实现,支持进度通知和取消代码生成。

当集成MBG到其他IDE环境中实现此接口将是重要的。Eclipse的插件提供此接口挂接到Eclipse的进度通知系统的实现。

提供您自己的实现,在org.mybatis.generator.api.MyBatisGenerator.generate()的一个方法调用上提供其中一个接口的实例。这个不能通过XML来配置。同样,我们假设,如果您提供自己的实现此接口,那么您也提供了一些附加代码(如新的Ant任务或IDE集成)来运行您的实现。