在学习Mybatis的过程中,我遇到了这样一个问题:
我这里是使用resultMap来自定义映射关系,我发现,我的主键和普通字段的映射关系即使是乱填的,我使用单元测试:
测试此函数后,输出如下:
我的数据库表如下:
实体类设置的属性如下:
private Integer departmentId; private String department;这里我就有了一个疑问:
为什么这里的department还能正确输出数据库表的内容?我的resultMap的映射关系都是乱写的啊,为什么?
原因:MyBatis 的自动映射机制(auto-mapping)
resultMap 配置无效,但自动映射机制仍生效
column=“sgrg” 和 column=“sdfaf” 是不存在的数据库列名(实际列是 department_id 和 department)。
MyBatis 无法将这些无效列映射到任何属性,因此 resultMap 没有成功映射任何数据。
当 resultMap 无法处理这些列时(因为配置的列不存在),MyBatis 会回退到自动映射机制(auto-mapping)。
自动映射规则:
如果数据库列名与实体类属性名完全一致,MyBatis 会直接映射(无需额外配置)。
所以是因为我的实体属性设置的department和数据库列名完全一致,发生了自动映射,所以department还是能正确输出数据库表department列的内容.