Java系列(LJ)mybatis-generator持久层

理解MyBatis Generator Plugin

2015-09-03  本文已影响13379人  叩丁狼教育

【原创文章,转载请注明原文章地址,谢谢!】

Paste_Image.png

Plugin能够用来在MyBatis Generator生成Java和XML文件过程中修改或者添加内容;Plugin必须实现org.mybatis.generator.api.Plugin接口,在这个接口中提供了非常多的方法,所以,很自然,MBG提供了一个适配器org.mybatis.generator.api.PluginAdapter,一般情况下只需要继承这个适配器即可;
MBG已经提供了一些内置的Plugin(这些Plugin是我们学习插件的非常好的示例),这些插件都在org.mybatis.generator.plugins包中;要能够写自己的插件,最重要的是了解插件的执行过程(生命周期)。

插件的生命周期##

插件拥有一个生命周期,在MBG初始化和生成的过程中,会有序的调用Plugin上不同的方法。插件的生命周期如下:

开发插件##

开发插件最好的方法就是继承org.mybatis.generator.api.PluginAdapter,然后只扩展自己需要扩展的方法;
实现自己的方法,可以用来修改默认的MBG生成好的代码,或者添加自己额外需要生成的代码,一般可以在插件中完成:

再次提醒,contextXXX方法总是会被调用,而Java Client Method,Model Method和SQL Map Method是根据配置的MBG参数来选择性的执行;比如如果配置的是flat生成样式,那么modelPrimaryKeyClassGenerated(TopLevelClass, IntrospectedTable)方法就不会被调用;
特别注意,如果一个方法返回的是boolean类型的,那么,如果该方法返回false,这个方法对应生成的代码片段(JAVA或者XML)就不会被生成了,并且,如果一个plugin返回了false,就会阻止其他的plugin的相同方法的继续执行,换句话说,配置在generatorConfig.xml中的plugin元素是有序的,这点需要特别注意。

MBG提供的内置的插件##

在MBG中,提供了一些插件,是我们很好的学习的素材,简单介绍下这些内置的插件:

org.mybatis.generator.plugins.CachePlugin###

这个插件是一个挺有用的插件,用来生成在XML中的<cache>元素(这个插件只针对MyBatis3/MyBatis3Simple有效哈);
很显然,这个插件需要一些配置,支持的配置属性有:cache_eviction,cache_flushInterval,cache_readOnly,cache_size,cache_type,具体就不解释了,和cache元素的属性一一对应;
很好的一点,在<table>元素中,可以通过定义property元素,来覆盖<plugin>元素中提供的默认值;

org.mybatis.generator.plugins.CaseInsensitiveLikePlugin###

这个插件用来在XXXExample类中生成大小写敏感的LIKE方法(插件本身用处不大,但是我们可以通过这个插件学习给XXXExample类添加额外的方法)

org.mybatis.generator.plugins.EqualsHashCodePlugin###

很明显,这个插件用来给Java模型生成equals和hashcode方法;注意下,如果Domain类有rootClass,需要重新处理下生成的代码(因为MBG是不会考虑rootClass相关内容的,甚至都不会加载rootClass,可以参考配置文件中rootClass相关说明);

org.mybatis.generator.plugins.MapperConfigPlugin###

比较有用的一个插件,可以用来帮助生成一个默认的MapperConfig.xml文件骨架,在这个骨架文件中完成了本次生成的mapper.xml文件的配置;
该插件支持的配置属性有:

org.mybatis.generator.plugins.RenameExampleClassPlugin###

这个插件可以使用正则表达式的方式来重命名生成的XXXExample类,通过配置 searchString和replaceString属性来完成(这个实现原理请参考MBG配置文件中的columnRenamingRule元素),
一个例子,比如要xxxExample改成xxxCriteria,只需要配置:

<property name="searchString" value="Example$" />
<property name="replaceString" value="Criteria" />

org.mybatis.generator.plugins.RowBoundsPlugin###

这个插件可以生成一个新的selectByExample方法,这个方法可以接受一个RowBounds参数,主要用来实现分页(当然,我们后面会生成我们自己的分页查询函数),这个插件只针对MyBatis3/MyBatis3Simple有效哈;

org.mybatis.generator.plugins.SerializablePlugin###

这个插件主要用来为生成的Java模型类添加序列化接口,并生成serialVersionUID字段;
有两个配置项:

org.mybatis.generator.plugins.ToStringPlugin###

这个插件顾名思义,为生成的Java模型创建一个toString方法,(PS:一个挺有用的插件,而且这个插件生成的toString方法性能还挺高哦~~)

好了,这篇文章先到这里吧,下面再来说说怎么自己写一个插件吧;

image
上一篇 下一篇

猜你喜欢

热点阅读