mybatis现在普遍使用的每一个人DAO框架。mybatis generator它可以基于数据库中的表结构,生成自己主动mybatis代码和配置文件,方便使用,当然,实际的使用过程中。generator当然,也有很多不尽人意的地方,幸运的是,他提供了一种机制插头,来帮我们做扩大。

解说的插件开发依赖下面mybatis版本号:

  1. <dependency>
  2. <groupId>org.mybatis</groupId>
  3. <artifactId>mybatis</artifactId>
  4. <version>3.2.2</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.mybatis.generator</groupId>
  8. <artifactId>mybatis-generator-maven-plugin</artifactId>
  9. <version>1.3.2</version>
  10. </dependency>

首先我们的插件类须要扩展PluginAdapter类,例如以下:

  1. public class PaginationPlugin extends PluginAdapter {

pluginAdapter提供了全部的接口,方便我们在插件进行到某个操作的时候。做自己定义的改动。这里我们主要介绍下面几类方法:

  1. public boolean modelExampleClassGenerated(TopLevelClass topLevelClass,
  2.                                               IntrospectedTable introspectedTable)
  3. public boolean sqlMapSelectByExampleWithoutBLOBsElementGenerated(
  4.             XmlElement element, IntrospectedTable introspectedTable) 

modelExampleClassGenerated方法顾名思义。就是生产modelExample类时的扩展,了解generator的都知道。他会帮你生产mapper、model、example三类java对象,当中example类是辅助我们用代码的方式来生产sql的,这个modelExampleClassGenerated方法就是在生产example的时候起效果的。

比方。原有的generator1.3.2插件不支持分页,那我们能够首先在modelExampleClassGenerated方法中。对生产的Class加上limit的參数,代码例如以下:

  1. CommentGenerator commentGenerator = context.getCommentGenerator();
  2. Field field = new Field();
  3. field.setVisibility(JavaVisibility.PROTECTED);
  4. field.setType(FullyQualifiedJavaType.getIntInstance());
  5. field.setName(name);
  6. field.setInitializationString("-1");
  7. commentGenerator.addFieldComment(field, introspectedTable);
  8. topLevelClass.addField(field);
  9. char c = name.charAt(0);
  10. String camel = Character.toUpperCase(c) + name.substring(1);
  11. Method method = new Method();
  12. method.setVisibility(JavaVisibility.PUBLIC);
  13. method.setName("set" + camel);
  14. method.addParameter(new Parameter(FullyQualifiedJavaType
  15. .getIntInstance(), name));
  16. method.addBodyLine("this." + name + "=" + name + ";");
  17. commentGenerator.addGeneralMethodComment(method, introspectedTable);
  18. topLevelClass.addMethod(method);
  19. method = new Method();
  20. method.setVisibility(JavaVisibility.PUBLIC);
  21. method.setReturnType(FullyQualifiedJavaType.getIntInstance());
  22. method.setName("get" + camel);
  23. method.addBodyLine("return " + name + ";");
  24. commentGenerator.addGeneralMethodComment(method, introspectedTable);
  25. topLevelClass.addMethod(method);

如代码所看到的,事实上我们就是定义了一个private int limitStart的属性,并加入了get和set方法。

加入完example的属性后,我们须要将这个属性加到生成的mapper xml配置文件里。

这就用到sqlMapSelectByExampleWithBLOBsElementGenerated方法,当然,注意这种方法的名字,我们想改动哪个xml文件里的sql,就须要找到相应的方法来复写。

  1. XmlElement isNotNullElement = new XmlElement("if"); //$NON-NLS-1$
  2. isNotNullElement.addAttribute(new Attribute("test", "limitStart != null and limitStart>-1")); //$NON-NLS-1$ //$NON-NLS-2$
  3. isNotNullElement.addElement(new TextElement(
  4. "limit ${limitStart} , ${limitEnd}"));
  5. element.addElement(isNotNullElement);

如上述代码,我们在生成的xml文件里。增加一个if条件推断,推断假设当前example类的limitStart和limitEnd不为-1。注意这个-1是我们在example扩展字段时候加上的默认值。假设不是默认值。那么就加上limit ${limitStart}, ${limitEnd}分页条件。

如上所述,就是这么简单。我们能够对生成的mybatis java代码、xml配置做自己的改动。

以下看一下,怎样来使用该插件。

我们首先须要在使用generator的projectpom文件里增加generator插件,并将我们的插件包依赖加进来,这里我们的样例是mybatis-page-plugin。

  1. <build>
  2. <defaultGoal>install</defaultGoal>
  3.  
  4. <plugins>
  5. <plugin>
  6. <groupId>org.mybatis.generator</groupId>
  7. <artifactId>mybatis-generator-maven-plugin</artifactId>
  8. <version>1.3.2</version>
  9. <configuration>
  10. <configurationFile>generatorConfig.xml</configurationFile>
  11. <verbose>true</verbose>
  12. <overwrite>true</overwrite>
  13. </configuration>
  14. <dependencies>
  15. <dependency>
  16. <groupId>mysql</groupId>
  17. <artifactId>mysql-connector-java</artifactId>
  18. <version>5.1.6</version>
  19. </dependency>
  20. <dependency>
  21. <groupId>org.duoku.groom</groupId>
  22. <artifactId>mybatis-page-plugin</artifactId>
  23. <version>1.0-SNAPSHOT</version>
  24. </dependency>
  25. </dependencies>
  26. </plugin>
  27. </plugins>
  28. </build>

如配置所述,我们的插件配置文件是generatorConfig.xml。我们来看一下这个文件:

  1. <generatorConfiguration>
  2.  
  3. <context id="MBG" targetRuntime="MyBatis3" defaultModelType="conditional"> <!--targetRuntime 此属性用于指定生成的代码的执行目标。
  4.  
  5. -->
  6. <plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin" />
  7. <plugin type="org.duoku.groom.mybatis.plugin.PaginationPlugin"></plugin>

如上图所看到的。我们在plugin中,加上我们的插件,PaginationPlugin。

此,我们可以使用这个插件。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

mybatis generator插件开发的更多相关文章

  1. mybatis Generator生成代码及使用方式

    本文原创,转载请注明:http://www.cnblogs.com/fengzheng/p/5889312.html 为什么要有mybatis mybatis 是一个 Java 的 ORM 框架,OR ...

  2. 使用MyBatis Generator自动创建代码(dao,mapping,poji)

    连接的数据库为SQL server2008,所以需要的文件为sqljdbc4.jar 使用的lib库有: 在lib库目录下新建一个src文件夹用来存放生成的文件,然后新建generatorConfig ...

  3. mybatis generator 自动生成dao层映射代码

    资源: doc url :http://www.mybatis.org/generator/ download:https://github.com/mybatis/generator/release ...

  4. mybatis generator maven插件自动生成代码

    如果你正为无聊Dao代码的编写感到苦恼,如果你正为怕一个单词拼错导致Dao操作失败而感到苦恼,那么就可以考虑一些Mybatis generator这个差价,它会帮我们自动生成代码,类似于Hiberna ...

  5. mybatis generator.xml 配置 自动生成model,dao,mapping

    generator.xml文件: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE gener ...

  6. Mybatis generator的使用

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration ...

  7. MyBatis Generator作为maven插件自动生成增删改查代码及配置文件例子

    什么是MyBatis Generator MyBatis Generator (MBG) 是一个Mybatis的代码生成器,可以自动生成一些简单的CRUD(插入,查询,更新,删除)操作代码,model ...

  8. 记一次 IDEA mybatis.generator 自定义扩展插件

    在使用 idea mybatis.generator 生成的代码,遇到 生成的代码很多重复的地方, 虽然代码是生成的,我们也不应该允许重复的代码出现,因为这些代码后期都要来手动维护. 对于生成时间戳注 ...

  9. Mybatis Generator生成工具配置文件详解

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration ...

随机推荐

  1. erlang如何有效地监视大量的并发连接

    阅读erlang一些开源web框架RabbitMQ.Ranch,他们使用多个进程在同一时间accept一socket.以这样的方式,使socketport监控共享很多其他的机会调度工作,但,在erla ...

  2. php &#160;性能优化

    基础优化 1 不要随便复制变量. 有时候为了使 PHP 代码更加整洁,一些 PHP 新手(包含我)会把提前定义好的变量拷贝到一个名字更简短的变量中,事实上这样做的结果是添加了一倍的内存消耗,仅仅会使程 ...

  3. Eclipse+Maven命令创建webapp项目<三>

    1.使用maven命令:mvn archetype:create -DgroupId=xxxxx -DartifactId=web-sample -DarchetypeArtifactId=maven ...

  4. hdoj 2102 A计画 【BFS】

    称号:hdoj 2102 A计画点击打开链接 意甲冠军:文的就不说了.求救出公主所须要的最短时间,所以用广搜. 分析:读题之后不难做,比一般的题目多了一个条件就是能够传送,那么我们能够在广搜里面加一个 ...

  5. Windows 7下一个:该应用程序不能正常启动(0xc0150002)

             在新系统中正确安装QQ2010无法执行,同一时候安装的TM2009也无法执行. 相同显示为"应用程序无法正常启动(0xc0150002). 请单击"确定" ...

  6. 透过浏览器看HTTP缓存(转)

    作为前端开发人员,对于我们的站点或应用的缓存机制我们能做的似乎不多,但这些却是与我们关注的性能息息相关的部分,站点没有做任何缓存机制,我们的页面可能会因为资源的下载和渲染变得很慢,但大家都知道去找前端 ...

  7. VS2013验证控件出现 WebForms UnobtrusiveValidationMode 必须“jquery”ScriptResour......错误的解决方案

    如下面的错误: 解决方式例如以下: 方法一: 在webconfig中找到 <appSettings> <addkey="aspnet:UseTaskFriendlySync ...

  8. 乐在其中设计模式(C#) - 单例模式(Singleton Pattern)

    原文:乐在其中设计模式(C#) - 单例模式(Singleton Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 单例模式(Singleton Pattern) 作者:weba ...

  9. 华为编程大赛汇总----java

           以下华为编程比赛题目都是网上整理得到的,代码都是自己调试过的,由于网上java答案较少,欢迎大家批评指正,也希望对准备华为上机的童鞋们有一点点帮助.在练习的过程中成长,加油!~~  1. ...

  10. TabHost+RadioGroup搭建基础布局

    xml的形势如下: <tabhost> <linearlayout vertival> <framlayout weight=1/> <tabwidget g ...