背景:mybatis-plus有逆向工程根据模板生成mybatis的mapper,dao,service,controller代码的功能。
复现:代码生成的基本配置做好了,运行,什么都没有只生成了配置好的包目录,但是下面没有实际的代码文件,查看console也没有报错。注意mybatis-puls的日志都是debug格式所以什么都不打印,正常的打印也没有,但是没有报错提示生成的目录,证明代码有一半是对的,所以得debug一下错误原因。
打断点debug:最后跟踪到AbstractTemplateEngine的getObjectMap方法,195行的
return config.getInjectionConfig().prepareObjectMap(objectMap);
发现objectMap这个参数解析后是,发现injectionConfig这个参数是空指针
然后导致的空指针异常
所以捕获到异常,抛出的错误,导致生成解析文件失败。
} catch (Exception var11) {
logger.error("无法创建文件,请检查配置信息!", var11);
}
这个是用来自定义属性的,可以设置参数解析文件,在生成代码的时候替换掉,这是正常用法。
但是我目前没有外部的自定义属性需要使用,所以就没定义这个外部参数,导致InjectionConfig对象为null,产生的空指针异常,导致程序中断,生成文件失败。
所以不管用不用,根据官方文档加上这个参数就好了。
总结:1.由于mybatis-plus的默认日志打印的不完善,所以找错误不好找,只能debug。2.自定义外部参数这个如果不使用,应该可以为null,但是这里要求必须为null,又没有提示,所以属于不合理的错误。 3.解决办法加上官方文档上的自定义属性这段代码就好了。
追加mybatis-plus的日志配置,加上这个日志生成提示就都打印完全了:
log4j.properties文件,放到src/main/resources下面
内容:
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p %d %C: - %m%n