扩展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集成)来运行您的实现。