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

  • 相关阅读:
    Two Sum
    Binary Tree Preorder Traversal *
    Rotate Array
    Repeated DNA Sequences
    Symmetric Tree
    Path Sum
    Python初学——多线程Threading
    Python初学——窗口视窗Tkinter
    pyinstaller打包多个py文件和去除cmd黑框
    python获取当前路径
  • 原文地址:https://www.cnblogs.com/lqlqlq/p/12619301.html
Copyright © 2020-2023  润新知