注:更新于2020年8月16日。
基础点
- mybatis-generator重新build不会覆盖mapper,只会覆盖dao。也就是会覆盖除mapper以外的文件,以避免覆盖在mapper手写的sql语句。
解决Mybatis反向生成的mapper.xml中对应数据库的字段名带有引号的问题
问题如图1所示:
数据表设计如图2所示:

原因: 由于name字段发生了关键字冲突,mybatis自动加上了单引号,用于区分,但是与#{}对应的变量名不一样,因此导致CRUD操作异常。
发生关键冲突的原因:
- mysql里面多个数据库不能配置相同名字的索引。
- 字段名与mysql存在的系统关键冲突。
- ...
方法: 修改 name 字段的名字即可,如 conf_name 。
进一步解释: 当关键字出现冲突时,mybatis写sql语句的时候会自动加上单引号,仅仅是为了区分。因此,‘key’等于key,在mysql命令行环境下使用CRUD操作没有异常,如图3所示。但是如果使用#{}传数据,那么数据表的字段名和#{}的变量名需要一一对应起来,也就是说‘key’不等于key,如图1所示。
图3关键字冲突测试结果:

Mybatis中逆向工程无法查询到类型为text的数据
- 数据库的text类型在Java中是String,不需要使用
<columnOverride>转换。
原因: mybatis中selectByExample无法对text类型的数据进行处理,因此无法查询text类型数据。而selectByExampleWithBLOBs对text类型的数据进行了处理,使用该方法即可。