首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mybatis-generator 逆向工程 自定义PO,xml,mapper,example

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

作者头像
执生
发布2020-09-27 10:45:20
5570
发布2020-09-27 10:45:20
举报
文章被收录于专栏:立权的博客立权的博客

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-04-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档