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)方法,只是沒有提供參數;
注意: