MyBatis Generator错误总结
为什么 别人写的时候都是完美运行,丝般润滑,到我这里时,却是一连串的异常。
难道是最新的jdbc 6.x的锅?(驱动名和连接url已经改过的情况下,具体可见上篇: jdbc连接mysql5与连接mysql6)
下面总结一下遇见的异常,方便以后。(先透露一下,最好使用5.x版本的jdbc)
异常1:log4j异常
MyBatis日志log4j异常 具体异常:
log4j:ERROR Could not instantiate class [org.apache.ibatis.session.AutoMappingUnknownColumnBehaviorTest$LastEventSavedAppender].
Java.lang.ClassNotFoundException: org.apache.ibatis.session.AutoMappingUnknownColumnBehaviorTest$LastEventSavedAppender
异常分析:无法将org.apache.ibatis.session.AutoMappingUnknownColumnBehaviorTest
实例化为LastEventSavedAppender
实际原因:直接把mybatis目录下的官方log4j.properties直接拿来用了,下图是官方资源的log4j.properties
(mybatis-3-mybatis-x.x..x src\test\java目录下)
解决方法:把WARN后的内容去掉
查看官方网址(http://www.mybatis.org/mybatis-3/configuration.html)也可知AutoMappingUnkownColumnBehavior只可取NONE,WARNING,FAILING三个值,默认值为NONE
异常2:连接数据库时区异常
连接数据库:ERROR: The server time zone value ‘�й�’ is unrecognized or represents more than one time zone
提示系统时区出现错误,可以在MySQL中执行命令: set global time_zone='+8:00'
或者在数据库驱动的url后加上serverTimezone=UTC
参数
写代码的时候要注意,如果该参数是‘?’
后的第一个,即
<property name="jdbcUrl"> jdbc:mysql://localhost:3306/exam?serverTimezone=UTC </property>
是没有问题的,但如果不是第一个,即
<property name="jdbcUrl"> jdbc:mysql://localhost:3306/exam?characterEncoding=utf8&serverTimezone=UTC </property>
这种写法是会报错的,会提示The reference to entity “serverTimezone” must end with the ‘;’ delimiter.
运行后控制台也会出现
对实体“serverTimezone”
的引用必须以‘;’
分隔符结尾。
的错误提示。
将代码改为
<property name="jdbcUrl"> jdbc:mysql://localhost:3306/exam?characterEncoding=utf8&serverTimezone=UTC </property>
即可。在xml的配置文件中;
要用 &
代替。
异常3:列名为空异常
Column name pattern can not be NULL or empty
Mybatis-generator :错误信息如下:
产生错误的原因: 工程引用了mysql-connector-java-6.0.3.jar.
解决方法:使用5.x版本,eg:mysql-connector-java-5.1.38.jar,或更低版本
记得改回原来的驱动名
上一篇: 由Java引起的指令重排序思考
下一篇: mysql8.0连接时报错:java.sql.SQLException: The server time zone value '�й���ʱ��' is unrecognized
推荐阅读