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(日后有空会把这篇文章完善

 

posted @ 2020-04-02 13:46  执生  阅读(1066)  评论(0编辑  收藏  举报