• mybatis generator core 开发指南


    阅读指南

    mbg 项目地址: https://github.com/mybatis/generator.git 

    mbg的用途:自动生成mybatis相关的数据访问代码,包括 java、xml、kotlin。

    mbg的用法:目前支持通过ant task、maven 插件、java -jar三种形式调用mbg进行代码生成。

    本文介绍mabatis generator core的代码结构和执行逻辑。

    源码下载后分成两个大项目,core和eclipse,本文介绍的是core项目的一个子工程,即下图红框中的内容。

    Basic Concept 和 包结构介绍

    MyBatisGenerator

    项目的主类,它本质上是执行mbg任务的入口,ant、maven、java -jar都调用MyBatisGenerator。

    GeneratorAntTask

    ant task的调用入口,它把MyBatisGenerator适配成ant task接口的形式,然后向外暴露。

    MyBatisGeneratorMojo 

    maven插件的调用入口,它把MyBatisGenerator适配成插件的形式,然后向外暴露给maven使用。

    ShellRunner 

    jvm的调用入口,它把MyBatisGenerator适配成java main接口的形式,然后向外暴露给jvm执行。

    Configuration

    与其说成configuration,不如说是arguments。它是传递给MyBatisGenerator的外部参数,对应的是xml参数配置,无论是ant、maven、还是java shell,都需要向mbg提供这个信息。

    Context

    一个独立的任务描述,它对应了Configuration xml文件中的<Context/>标签,一个<generatorConfiguration>可以有多个<Context/>标签,执行多个任务。mbg生成代码的过程,是以Context为单位的。

    AbstractGenerator

    文件生成器,最顶层的抽象类,不负责任何具体的代码生成。它有很多子类负责执行具体的代码生成和提供相关接口,例如JavaMapperGenerator、SimpleXMLMapperGenerator、KotlinDataClassGenerator。仅Java class的generator就有xml、annotation、mixed多种形式。如果你想开发新的特性,可以在这个继承树中扩展。

    Plugin

    这里的插件不是maven插件,而是给代码生成器generator使用的插件。generator通过组合使用不同的plugin来产生不同的效果。编写插件是第二种开发新特性的方式。

    dom

    以面向对象形式提供的,对代码文件(java、xml、kotlin)的描述。它屏蔽了将内容写入文件的具体细节,使得开发人员可以以面向对象的形式来描述要生成的文件内容。

    包结构介绍

    有了上面的概念,再来看项目的包结构就很清楚了。

    ant包是ant调用入口

    api包是各种接口定义和mybatisGenerator入口等

    codegen是代码生成逻辑,即上面提到的generator继承树

    config 解析xml参数

    plugins 插件,generator使用的插件

    代码调用逻辑

    从mybatisGenerator的generate方法看起就可以了。

    基本流程是:

    1、把xml参数解析成configuration

    2、设置一些callback回调(和主逻辑相关性不大,例如进度显示之类的)

    3、进入mybatisGenerator的主入口

    4、依次执行每个context任务,将生成的文件内容保存

    5、把生成的文件写入磁盘

    而context的执行则是调用了不同的generator,generator又会用到plugin

    end

  • 相关阅读:
    正则表达式常用收集
    IIS 部署nodejs
    借助svn进行半自动多台服务器上线部署
    快速开发window服务器程序
    sql server 存储过程解密
    EF 剥坑
    测试常规需要测试的东西
    html5本次存储几种方式
    log4net 写日志配置
    js 获取定位信息
  • 原文地址:https://www.cnblogs.com/afraidToForget/p/12995817.html
Copyright © 2020-2023  润新知