zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    选择排序
    转:ASP.NET MVC中Unobtrusive Ajax的妙用
    转:MVC 下导航超链接本页面高亮的一种解决方案
    转载:iOS 推送的服务端实现
    转载:Unobtrusive JavaScript in ASP.NET MVC 3 隐式的脚本在MVC3
    待实践三:MVC3下 路由的测试 使用 RouteDebug.dll 来测试判断路由是否符合
    待实践二:MVC3下的3种验证 (1)前台 jquery validate验证 (2)MVC实体验证 (3)EF生成的/自己手写的 自定义实体校验(伙伴类+元素据共享)
    待实践一:仿造博客园后台上传头像并切图生成缩略图fine uploader.js jcrop.js
    Jquery 模板插件 jquery.tmpl.js 的使用方法(1):基本语法,绑定,each循环,ajax获取json数据
    Linq 时间对比陷阱坑
  • 原文地址:https://www.cnblogs.com/afraidToForget/p/12995817.html
Copyright © 2011-2022 走看看