PluginAdaptor 是适配器设计模式吗?html
程序入口:java
https://blog.csdn.net/u011781521/article/list/6 大神讲解连接sql
插件shell
自带插件举例(具体参见官网http://www.mybatis.org/generator/reference/plugins.html):设计模式
<cache eviction="FIFO" <!--回收策略为先进先出--> flushInterval="60000" <!--自动刷新时间60s--> size="512" <!--最多缓存512个引用对象--> readOnly="true"/> <!--只读-->
插件生命周期api
(第一种接口)Java客户端方法:1,2缓存
(第二种接口)模型方法:1mybatis
(第三种类型接口)SQL Map方法:1app
详细版:函数
1.使用默认构造器建立;
2.setContext方法调用,注入生成器上下文;
3.setProperties方法调用,传入在配置文件中插件的参数;
4.validate方法调用,该方法通常用于验证传给参数的正确性,若是该方法返回false,则该插件结束执行;
5.针对context中配置的每个table:
6.initialized方法被调用,用于初始化操做,传入IntrospectedTable;
7.Java Client Methods被调用(这个地方须要注意一下,这里的Java Client Method调用和下面的Model Method,SQL Map Method的调用的前提是针对该table配置是分别须要生成client,model和SQL的,若是一个table不须要生成java client,那么这个阶段就忽略,下面两个阶段同理):
--clientXXXMethodGenerated(Method, TopLevelClass, IntrospectedTable)方法调用(好比clientCountByExampleMethodGenerated方法),这些方法其实就是对应Java DAO中生成对应方法时调用(那个TopLevelClass其实就是对Java类的DOM封装)【注意】,这些方法主要针对ibatis;
--clientXXXMethodGenerated(Method, Interface, IntrospectedTable)方法调用(好比clientCountByExampleMethodGenerated方法),这些方法其实就是对应Java中Mapper生成对应方法时调用;经过返回true和false来表明该方法是否须要生成;
-clientGenerated(Interface, TopLevelClass, IntrospectedTable)方法调用;
8.Model Methods被调用:
--对每个字段依次调用modelFieldGenerated, modelGetterMethodGenerated, modelSetterMethodGenerated方法
--modelExampleClassGenerated(TopLevelClass, IntrospectedTable):用于建立XXXExample类;TopLevelClass参数同理,也是就是生成XXXExample类的DOM;
--modelPrimaryKeyClassGenerated(TopLevelClass, IntrospectedTable):用于建立那个主键(KeyClass)类;
--modelBaseRecordClassGenerated(TopLevelClass, IntrospectedTable):用于建立那个Record class(主Class)类;
--modelRecordWithBLOBsClassGenerated(TopLevelClass, IntrospectedTable):用于建立包含全部BLOB列的类;
若是要修改这些类的生成结果,就是去修改TopLevelClass这个DOM的结构而已;
9.SQL Map Methods:这些方法主要是在生成SQL 那个mapper.xml文件时调用;
--sqlMapXXXElementGenerated(XmlElement, IntrospectedTable),好比sqlMapDeleteByExampleElementGenerated,其实就是在XML文件中生成对应SQL元素的时候调用该方法,咱们要修改生成的SQL或者元素内容,其实就是修改那个XmlElement,XmlElement是MBG对XML文件的DOM封装;
---sqlMapDocumentGenerated(Document, IntrospectedTable)
---sqlMapDocument(GeneratedXmlFile, IntrospectedTable),这两个方法都是最后生成XML的时候调用;
--contextGenerateAdditionalJavaFiles(IntrospectedTable)方法调用(生成额外的Java文件,MBG本身是没有实现这个方法的,提供给插件一个扩展机会);
--contextGenerateAdditionalXmlFiles(IntrospectedTable)方法调用(同理,生成额外的XML文件,MBG本身是没有实现这个方法的,提供给插件一个扩展机会)
--contextGenerateAdditionalJavaFiles()方法调用,同contextGenerateAdditionalJavaFiles(IntrospectedTable)方法,只是没有参数而已;
--contextGenerateAdditionalXmlFiles()方法调用,同contextGenerateAdditionalXmlFiles(IntrospectedTable)方法,只是没有提供参数;
注意: