MyBatis的ResultMap
通常来说,数据库的命名规范一般是xxx_xxx
这样子,而Java的属性命名方式一般是采用的小驼峰命名
,即eName,empNo…这样的。而MyBatis的自动映射机制要求我们必须要与数据库的字段对应。所以ResultMap
可以将我们的Java属性与数据库字段映射对应,即自定义的映射关系
。
ResultMap标签就是用来解决这种情况。
这里数据库中有两张表emp01(员工表),dept01(部门表)
一表:部门表
多表:员工表
关联字段:部门编号
ResultMap结果集映射
resultMap 元素的属性值和子节点
- 属性
- id :唯一标识,此 id 值用于 select 元素 resultMap 属性的引用。
- type :表示该 resultMap 的映射结果类型。
- 节点
- result :用于标识一些简单属性,其中 column 属性表示从数据库中查询的字段名或别名, property 属性则表示查询出来的字段对应的值赋给实体对象的哪个属性。
说明:
MyBatis 中在对查询进行 select 映射的时候,返回类型可以用 resultType 也可以用 resultMap ,resultType和 resultMap 有一定关联和区别,应用场景也不同。
ResulMap标签主要是用于表的关联查询
操作以及实现pojo与数据库表的映射关系
,首先说明常用的
多表对应关系
- 一对一
- 一对多
- 多对一
- 多对多(可以拆分[成多对一+一对多])
数据库字段名和实体类属性名不一致的问题
方式一 typeAliases起别名
类型别名是为 Java 类型命名的一个短的名字。它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余。
使用方式:
在著配置文件中,在settings标签中设置typeAliases子标签
也可以为某一个类去设置别名
不足之处:
- 这张方式只为一个类设置别名,会造成大量的typeAliases标签,本身别名就是为了简化操作,这又要每一个类要配置一个typeAliases标签,失去了本身的意义。
使用注意事项:
- 所以通常我们都是使用
package标签
,为整个pojo包下设置别名,这样设置的别名都是我们的类名
, - 但是也可以随便起,不建议。扫描之后的别名就是类名(不区分大小写),建议使用的时候和类名一致(小写)。
方式二 resultMap自定义映射关系
如果我们的pojo实体类中的字段属性与数据库中不一致,存在多表关联的操作,那么此时我们就需要使用resultMap自定义引用数据类型的数据。
多表出发 association属性
从多表的一方出发观察:
pojo类
数据库字段
一方出发