相信不少人都用过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类里添加自定义注释,这个是能够作到的,下一篇大象会讲这方面的内容。