Mybatis-generator 逆向工程 自定義PO,xml,mapper,example


1.首先在pom文件中導入依賴 

  版本自己定義

<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.6</version>
</dependency>

2.逆向工程程序段

File configFile = new File("mybatisg.xml"); //mybatisg.xml是逆向工程的配置文件,可以自己定義
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
myBatisGenerator.generate(null);

3.配置逆向工程配置文件(略)

4.自定義生成器

我們關注的是怎么自定義文件的生成規則

首先讓我們的插件類繼承Mybatis-generator提供的適配器

 

 

 

我們主要關注這幾個重寫方法

  1.插入(用來生成自定義PO)的程序的入口

 

  2.插入(自定義xml文件)的程序的入口  

 

 

  3.插入(自定義Example)的程序的入口

 

 

  4.插入(自定義mapper接口)的程序的入口

 

 

 

 

首先看第一個,自定義我們的PO

 

 

 

 1.我們定義的PO規則生成類,需要繼承官方提供的JavaSrcGenerator,並重寫generate方法

在重寫的generate方法里,我們就可以對PO類為所欲為,上下其手(誤

 

 

API的命名很清楚。打個點,IDE自動補全的方法很多的用法都顯而易見。

2.XML文件自定義

首先,包含XML文件規則的類要先繼承官方的抽象XML節點生成器

 

 

然后,在自定義插件類的這個重寫方法里,把XML的根節點作為參數扔到我們的addElements方法里,我們就可以在重寫的addElements方法里操作這個XML文件

其實本質是是根據傳入的表信息(introspectedTable)來修改document,但是為了功能模塊化,我們自定義Generator並且用addElements方法完成我們的邏輯比較好

 

 

 

 我自己寫的話是沒有直接在addElements方法里直接實現規則邏輯,而是交給了又一層對象

 

 

真正的邏輯只是操作root節點

我們想在XML文件里加一個Select,這個Select的名字(也是id,也是mapper文件中對應的方法名)是selectByExampleSelectiveOptimized

意圖是寫出 select * from A a inner join (select id from A where col = xxx ) as b on a.id = b.id limit m,n

這樣col列上有輔助索引的情況下,區別於 select * from A where col = xxx limit m,n

我們可以防止innodb在聚簇索引樹上掃描一堆無用記錄,充分利用內存的page緩存

效果圖:

 

自定義逆向工程的核心思想:

其實就是在節點里加節點(XmlElement),層層嵌套

每個節點表示的是 <XXX> </XXX> 這種結構,在這個節點里加上(addElement方法)節點BBB的話就是 <XXX> <BBB> </BBB> </XXX>

節點上面可以有屬性(Attribute)比如 XXX 有 aaa 屬性: <XXX aaa = "" > </XXX>

還有一種節點是文本節點(TextElement),比如在XXX中插入(addElement方法)文本節點MMM :<XXX aaa = "">  <BBB> </BBB> MMM </XXX>

(BBB先插入的,所以MMM在BBB后面)

最后,把XXX節點加到根節點上。root.addElement(XXX)。 文件里就有了 <XXX aaa = "">  <BBB> </BBB> MMM </XXX> 這句話。

注意不用在root中插入MMM和BBB,因為他們附在XXX上

 

 

 

mapper中的參數二,一個 List<String> 類型,即param2是一個List<String>類型

 

 

這里設置all 和 removed 參數的意圖是:

1.如果這兩個參數都是空,則同 select * from ... 

2.如果all不空,如果all中有A,B,C這些String   那么就是 select A,B,C from ...

3.如果all空,removed不空,如果表中的字段有A,B,C,D,E,F  並且removed中有A,B,C這三個字段  那么就是select D,E,F from ...

 

 

 

 

Example和Mapper的自定義規則類似上述的PO(日后有空會把這篇文章完善

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM