您的位置:首页 > 移动开发

关于参考《MyBatis Generator 1.3.4 扩展,可以设置 Mapper(Dao)后缀》的一些疑问

2017-07-25 03:32 621 查看
写在前面的话:

1】自己配置一个项目,想在项目中用到MyBatis Generator逆向生成bean、dao、mapper文件。

2】用maven加载插件MyBatis Generator 1.3.5后,配置generatorConfig.xml。重点如下:

<context id="xxxxTables" defaultModelType="flat" targetRuntime="MyBatis3">
<table tableName="%" domainObjectName=""></table>


3】运行Generator后,的确生成了相应的bean、dao、mapper文件;

4】但是有点不完美的地方:

生成的dao文件名后自动带上了mapper,变成了SysOrgMapper.java;

生成的xml文件名后自动带上了Mapper,成了SysOrgMapper.xml;

5】因为觉得Dao文件名有点纠结(我希望的是生成类似文件:SysOrgDao.java、SysOrgMapper.xml),所以在网上搜索了下解决方案,没想到还真找到一篇。

传送门:MyBatis Generator 1.3.4 扩展,可以设置 Mapper(Dao)后缀

原文地址:http://blog.csdn.net/isea533/article/details/52430691

源码传送门:通用Mapper地址

源码地址:http://git.oschina.net/free/Mapper

6】遂根据文档指导进行代码修改,修改完成后执行如下步骤:

(1) 运行main方法:

(2) 运行generator 插件:

7】运行出现错误,但是依然生产了bean、dao、mapper相应的文件。错误如下:

[ERROR] Failed to execute goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.5:generate (default-cli) on project QRCodeServices: targetRuntime in context CtfsDbTables is invalid -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.5:generate (default-cli) on project QRCodeServices: targetRuntime in context CtfsDbTables is invalid
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
at org.codehaus.classworlds.Launcher.main(Launcher.java:47)
Caused by: org.apache.maven.plugin.MojoExecutionException: targetRuntime in context CtfsDbTables is invalid
at org.mybatis.generator.maven.MyBatisGeneratorMojo.execute(MyBatisGeneratorMojo.java:217)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)
... 21 more
[ERROR]
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException[/code] 
8】不知道这个错误到底是什么原因导致的,能力有限分析不出来。接到第7条:

生成的dao文件名后自动带上了Dao,变成了SysOrgDao.java;
但是!
生成的xml文件名后也自动带上了Dao,变成了SysOrgDao.xml;
9】跟预期不符,然后继续修改代码,
10】大概分析了下:TkMyBatis3Impl类的:calculateMyBatis3XmlMapperFileName()方法,大概确定了导致这个xml文件名添加Dao的位置:但是不知道怎么修改
应该是这段代码:

//支持mapperName = "{0}Dao" 等用法
sb.append(MessageFormat.format(mapperName, fullyQualifiedTable.getDomainObjectName()));
不明白该怎么修改,苦逼,所以整了个笨方法。

11】笨方法:把方法体中的if选择语句做了点修改:。

改成:

直接走else,给文件名加上"Mapper.xml"。

12】最后重新跑了一下,实现了原来的目的:

生成的dao文件:SysOrgDao.java;

生成的xml文件:SysOrgMapper.xml;

----------------------------------------------------------------

留下几个小问题比较困惑:

【1】 第六步的操作是不是有问题,感觉是不是那个位置没配好,操作需要这么复杂吗?

【2】错误到底是什么原因导致的?

【3】第十步还有更好的解决方案吗?第十步我尝试过直接注释掉:calculateMyBatis3XmlMapperFileName这个方法,但是结果变成了:

生成的dao和xml变成了:{0}Dao.java、{0}Dao.xml

几个问题,如果有路过的大神能帮忙解答下就好。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Generator mybatis
相关文章推荐