随笔-67  评论-522  文章-0  trackbacks-0
    相信很多人都用过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
posted on 2015-03-20 17:15 菠萝大象 阅读(24760) 评论(14)  编辑  收藏 所属分类: mybatis-generator

评论:
# re: 修改mybatis-generator-1.3.2源码实现自定义代码生成详解(一) 2015-07-28 11:34 | Fiery
你好 我用的是intellij,请问一下我怎么才能让项目调用我的源码文件而不是调用maven库的jar包呢。下面是我pom.xml的配置
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>${plugin.mybatis.generator}</version>
<configuration>
<configurationFile>${mybatis.generator.generatorConfig.xml}</configurationFile>
<overwrite>true</overwrite>
<verbose>true</verbose>
</configuration>
</plugin>  回复  更多评论
  
# re: 修改mybatis-generator-1.3.2源码实现自定义代码生成详解(一) 2015-08-04 14:35 | 菠萝大象
你修改完之后,打包成jar,发布到你的本地仓库去覆盖掉从中央仓库下载下来的就可以了。我例子最后不是会生成一个ZIP么,就用那个很方便呐  回复  更多评论
  
# re: 修改mybatis-generator-1.3.2源码实现自定义代码生成详解(一)[未登录] 2015-08-15 15:37 | Alan
楼主这文章对我很有用。commentGenerator这个节点还必须放在jdbcConnection节点前面,context下的节点必须按照顺序放,雷死。
(property*,plugin*,commentGenerator?,jdbcConnection,javaTypeResolver?,javaModelGenerator,sqlMapGenerator?,javaClientGenerator?,table+)  回复  更多评论
  
# re: 修改mybatis-generator-1.3.2源码实现自定义代码生成详解(一) 2016-03-26 17:26 | 汤奋斗
我修改了源码,并且发布到本地仓库了(手动进入本地仓库,查看jar都是ok的),可是我生成代码时,发现修改的没有生效,这是什么原因?  回复  更多评论
  
# re: 修改mybatis-generator-1.3.2源码实现自定义代码生成详解(一) 2016-03-29 11:31 | 菠萝大象
@汤奋斗
你没必要发布到maven仓库,我这个工程打包后直接运行run.bat就可以生成代码了  回复  更多评论
  
# re: 修改mybatis-generator-1.3.2源码实现自定义代码生成详解(一) 2016-07-16 20:10 | 陌陌
@菠萝大象
大象,你好!有个问题请教下,我把你的源码拷贝到一个新的maven项目,然后引入所需的log4j和ant包,用maven的jar插件运行打包,但是打成的jar一直用不了,运行就报错,但是用你的jar却是可以的,请你你是怎么打包的或者能不能帮忙看看~   回复  更多评论
  
# re: 修改mybatis-generator-1.3.2源码实现自定义代码生成详解(一) 2016-07-18 10:07 | 菠萝大象
@陌陌
是什么错误?  回复  更多评论
  
# re: 修改mybatis-generator-1.3.2源码实现自定义代码生成详解(一) 2016-08-17 08:52 | donghc
大象可否把pom.xml共享出来,我可以用main方法实现,但是用pom.xml打成的jar,用命令行启动(指定了config.xml),报错找不到配置文件。想看看是不是pom.xml打包出问题了  回复  更多评论
  
# re: 修改mybatis-generator-1.3.2源码实现自定义代码生成详解(一) 2016-08-17 13:05 | 菠萝大象
@donghc
你去这个地址下下来看看http://pan.baidu.com/s/1gf8u1rH  回复  更多评论
  
# re: 修改mybatis-generator-1.3.2源码实现自定义代码生成详解(一) 2016-08-17 13:29 | donghc
@菠萝大象
不行,还是一样的~~有些尴尬了。我用你分享的这个直接mvn package,然后解压.zip文件。 运行run就会出现问题。
D:\mybatis-generator\target\mybatis-generator-1.3.2>java -jar mybatis-generator-1.3.2.jar -configfile generatorConfig.xml -overwrite
java.net.MalformedURLException
at java.net.URL.<init>(Unknown Source)
at java.net.URL.<init>(Unknown Source)
at java.net.URL.<init>(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startDTDEntity(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.setInputSource(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.dispatch(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
at org.mybatis.generator.config.xml.ConfigurationParser.parseConfiguration(ConfigurationParser.java:109)
at org.mybatis.generator.config.xml.ConfigurationParser.parseConfiguration(ConfigurationParser.java:82)
at org.mybatis.generator.config.xml.ConfigurationParser.parseConfiguration(ConfigurationParser.java:74)
at org.mybatis.generator.api.ShellRunner.main(ShellRunner.java:107)
Caused by: java.lang.NullPointerException
... 21 more  回复  更多评论
  
# re: 修改mybatis-generator-1.3.2源码实现自定义代码生成详解(一) 2016-08-17 14:00 | 菠萝大象
@donghc
maven不是这样玩的呀,我的run是打包后用的,你仔细看了第三篇的内容么?在IDE里直接启动StartUp就行了,这个类是用来测试的  回复  更多评论
  
# re: 修改mybatis-generator-1.3.2源码实现自定义代码生成详解(一) 2016-08-17 14:09 | donghc
@菠萝大象
我明白StartUp这个类是测试类,我用这个可以实现。现在就是打包后,想用命令行来调用,发现出的异常。
我现在的操作是这样子的:
1:下载你分享在云盘里面的工程,导入到idea里面
2:运行mvn package打包代码
3:到target目录下面,里面有mybatis-generator-1.3.2.zip,解压进入文件夹
4:更改数据库链接,运行run.bat。然后就报错了。
  回复  更多评论
  
# re: 修改mybatis-generator-1.3.2源码实现自定义代码生成详解(一) 2016-08-18 08:52 | 菠萝大象
@donghc
你要看看generatorConfig.xml里面的mysql驱动地址对不对,你连接的数据库用户名密码正不正确,run.bat里面指定的generatorConfig.xml名字与解压后的是不是一样的,targetProject有没有指定一个目录。  回复  更多评论
  
# re: 修改mybatis-generator-1.3.2源码实现自定义代码生成详解(一) 2016-09-07 08:31 | 半湖思絮
为了回复你的贴子,人工注册,真心不容易。想问一下,有没有修改pojo类名的地方啊?比如User统一换成UserVo,但其它类名比如UserExample,UserDao,UserMapper不会跟着发生改变。如果在配置中加了Vo,可能对应其它类名也变成了UserVoExample,UserVoDao,UserVoMapper了  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: