修改mybatis-generator-1.3.2源码实现自定义代码生成详解(一)

相信很多人都用过mybatis-generator-core生成pojoxml文件,但是这工具最后一个版本是1.3.2版,20127月后就没再更新了,同时因为这玩意是老外写的,可能与咱们国人的有些习惯不一致,所以在使用上总会感觉不怎么爽,大象也有这个体会,所以对源码作过一些修改,现将这些总结分享出来给需要的朋友。
    首先大象得说一下,我对mybatis-generator-core也没有太深入的了解,仅仅是把它当成一个工具,只是感觉用的不顺手,就稍微了解了一下,顺便改了改。所以本篇没涉及到的地方,如果你知道,还请多多分享,大象感激不尽。另外,我对源码的修改主要是针对MySQL数据库,在第二篇中会讲到。
    这个项目本身是放在googlecode上面的,但是有一道“墙”,你懂的。所以得换个方式来获得源码。
    首先新建一个maven工程,添加下面的依赖,使用mavenDownload Sources,获得mybatis-generator-core的源码。

< dependency >
     < groupId >org.mybatis.generator </ groupId >
         < artifactId >mybatis-generator-core </ artifactId >
         < version >1.3.2 </ version >
</ dependency >

    将源码解压放到工程里面,然后就可以开始修改了。记得把之前的依赖去掉哦!我主要说明改哪些源码,以及作用。
    org.mybatis.generator.api.dom.OutputUtilities
    mybatis-generator里面我觉得首先最应该改的就是OutputUtilities这个类,它里面有个xmlIndent方法是用来控制生成的xml文件中空格的缩进,默认是两个空格,但四个空格对于我们来说已经深入骨髓了,所以必须改。sb.append("  ")里面增加两个空格就可以了。
    

    org.mybatis.generator.api.dom.java.InnerClass
    这个类就是用来控制生成pojo类以及格式化,我主要是修改属性之间以及方法之间的换行。
    源文件:
    

    178-180行就是在每个属性后面增加一个换行,大象喜欢紧凑风格的代码,于是就把红框内的代码去掉了。再看下图,注意红线的172行,在这里增加换行是让生成的第一个属性与类的声明之间有一个空行。
    

    如果你觉得gettersetter方法也不想有空行,可以把源文件的206-208行这段代码去掉,大家可以根据自己的习惯来,大象在这里把它去掉。
    org.mybatis.generator.codegen.mybatis3.IntrospectedTableMyBatis3Impl
    这个类的第210行有个getGeneratedXmlFiles()方法,注意下图中红线的true这个属性,它是用来控制是否合并生成xml文件,这里显然默认就是合并,对于我们来说,修改数据库表结构是经常发生的事情,不能每次重新生成之后,都手动去删除吧?所以这里要坚决的把它改成false
    

    现在我们将true改成了false,问题解决了,但是它究竟是在哪里起作用的呢?请看org.mybatis.generator.api.MyBatisGenerator这个类252,它包含在generate方法里。
    

    第一个if就会判断是否合并,上图中已经显示了isMergeabletrue,所以当然是合并了,但我们将它改成false后,一定要在执行的命令行里加上overwrite参数,这样才能够让shellCallback.isOverwriteEnabled()生效,从而实现我们的xml文件覆盖生成。
    mybatis-generator除了默认会合并xml文件外,还会默认生成一个带Example后缀的pojo,它有点类似HibernateCriteria对象。另外它还会在xml里面默认会生成一堆id="xxxByExample"的东西,这些都要用到那个Example类,不光如此,为了配合起来用,还有一堆与之相关的<sql>标记,所有这些在大象看来都不需要,我们使用MyBatis不就是为了它的简洁与方便吗?所以我不想看到它,需要怎么改呢?可以在配置文件里面修改。
    

    加上这些属性设置,就会过滤掉我之前说的东西,而且Example类也不会再出现,呵呵,世界终于清净一些了。
    这些属性是设置到org.mybatis.generator.config.TableConfiguration类里面起作用的,它里面有这些属性与之对应的set方法,那么配置文件中的boolean值是在哪里设置的呢?它们是在初始化解析配置文件的时候做的,完成它的类是:
    org.mybatis.generator.config.xml.MyBatisGeneratorConfigurationParser
    

    这段代码在parseTable里面,tc就是TableConfiguration,现在大家明白了吧?
    mybatis-generator还有一个让人不爽的地方就是会在pojoxml中生成一堆英文注释,这东西完全没什么用,我想把它去掉,像下面这样在配置文件中加上这一段。
    
    看到这里有童鞋就有意见了,泥妹的,这不是一刀切了么。我只是不想在xml里生成注释,另外想在pojo类里添加自定义注释,这个是可以做到的,下一篇大象会讲这方面的内容。
    本文为菠萝大象原创,如要转载请注明出处。http://www.blogjava.net/bolo

猜你喜欢

转载自changhongbao.iteye.com/blog/2282535