🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 扩展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](mailto:mybatis-user@googlegroups.com) 发送信息。 ## 扩展与插入 虽然本网页上显示了许多不同的扩展点,在大多数情况下,这将是很容易通过使用插件扩展MBG。查阅[开发插件](pluggingIn.html)的参考页面了解更多信息。 代码生成的主要扩展点是`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提供反射表的几种实现。实现基于`&lt;context&gt;`元素的`targetRuntime`属性值。在大多数情况下,继承下面的一个内置的扩展比从头开始创建一个实现会容易很多。下表显示了内置的实现: | TargetRuntime | 实现 | | --- | --- | | MyBatis3(默认) | `org.mybatis.generator.codegen.mybatis3.IntrospectedTableMyBatis3Impl` | | Ibatis2Java2 | `org.mybatis.generator.codegen.ibatis2.IntrospectedTableIbatis2Java2Impl` | | Ibatis2Java5 | `org.mybatis.generator.codegen.ibatis2.IntrospectedTableIbatis2Java5Impl` | 如果您选择实现此扩展点,指定`&lt;context&gt;`元素的`targetRuntime`属性为您的实现类的完全限定类名。 ### org.mybatis.generator.api.IntrospectedColumn `IntrospectedColumn`是一个包含列的信息的类,因为它是一个从数据库返回的元数据类。在某些罕见的情况下,可能需要重写这个类来提供自己的 - 特别是如果您创建了一套新的代码生成器。 如果您选择实施此扩展点,指定`&lt;context&gt;`元素的`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集成)来运行您的实现。