mybatis-generator

Posted Simon1020

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis-generator相关的知识,希望对你有一定的参考价值。

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

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

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

    第一个if就会判断是否合并,上图中已经显示了isMergeable为true,所以当然是合并了,但我们将它改成false后,一定要在执行的命令行里加上overwrite参数,这样才能够让shellCallback.isOverwriteEnabled()生效,从而实现我们的xml文件覆盖生成。
    mybatis-generator除了默认会合并xml文件外,还会默认生成一个带Example后缀的pojo,它有点类似Hibernate的Criteria对象。另外它还会在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还有一个让人不爽的地方就是会在pojo和xml中生成一堆英文注释,这东西完全没什么用,我想把它去掉,像下面这样在配置文件中加上这一段。
    技术分享
    看到这里有童鞋就有意见了,泥妹的,这不是一刀切了么。我只是不想在xml里生成注释,另外想在pojo类里添加自定义注释,这个是可以做到的,下一篇大象会讲这方面的内容。
    本文为菠萝大象原创,如要转载请注明出处。http://www.blogjava.net/bolo











































以上是关于mybatis-generator的主要内容,如果未能解决你的问题,请参考以下文章