mybatis 自动映射——迹忆客-ag捕鱼王app官网
正如你在前面一节看到的,在简单的场景下,mybatis 可以为你自动映射查询结果。但如果遇到复杂的场景,你需要构建一个结果映射。 但是在本节中,你将看到,你可以混合使用这两种策略。让我们深入了解一下自动映射是怎样工作的。
当自动映射查询结果时,mybatis 会获取结果中返回的列名并在 java 类中查找相同名字的属性(忽略大小写)。 这意味着如果发现了 id 列和 id 属性,mybatis 会将列 id 的值赋给 id 属性。
通常数据库列使用大写字母组成的单词命名,单词间用下划线分隔;而 java 属性一般遵循驼峰命名法约定。为了在这两种命名方式之间启用自动映射,需要将 mapunderscoretocamelcase 设置为 true。
甚至在提供了结果映射后,自动映射也能工作。在这种情况下,对于每一个结果映射,在 resultset 出现的列,如果没有设置手动映射,将被自动映射。在自动映射处理完毕后,再处理手动映射。 在下面的例子中,id 和 username 列将被自动映射,hashed_password 列将根据配置进行映射。
有三种自动映射等级:
none
- 禁用自动映射。仅对手动映射的属性进行映射。partial
- 对除在内部定义了嵌套结果映射(也就是连接的属性)以外的属性进行映射full
- 自动映射所有属性。
默认值是 partial,这是有原因的。当对连接查询的结果使用 full 时,连接查询会在同一行中获取多个不同实体的数据,因此可能导致非预期的映射。 下面的例子将展示这种风险:
在该结果映射中,blog 和 author 均将被自动映射。但是注意 author 有一个 id 属性,在 resultset 中也有一个名为 id 的列,所以 author 的 id 将填入 blog 的 id,这可不是你期望的行为。 所以,要谨慎使用 full。
无论设置的自动映射等级是哪种,你都可以通过在结果映射上设置 automapping 属性来为指定的结果映射设置启用/禁用自动映射。