在 MyBatis 中,resultMap用来将数据库查询结果映射到 Java 对象。定义了如何将 SQL 查询结果的列与 Java 对象的属性进行映射。它支持复杂的映射关系,如一对多、多对一等。
基本的ResultMap
假设有一个User类:
class User { |
<resultMap id="userResultMap" type="User"> |
id表示主键映射,通常对应数据库表中的主键字段。【要放在第一行】
result表示普通字段映射,property是Java类的属性,column是数据库表中的列名
上边的resultMap对应的select语句就可以这么写:
select id "user_id", username "user_name" |
开启autoMapping映射
autoMapping映射是一种自动映射机制,用于自动将 SQL 查询结果的列与 Java 对象的属性进行匹配。它简化了映射的配置,不需要显式地为每个属性定义映射关系。
<resultMap id="userResultMap" type="User" autoMapping="true" /> |
上边的resultMap对应的select语句就可以这么写:
select id, username |
在启用了
autoMapping
后,user_id
会自动映射到userId
。
复杂的ResultMap
一对多映射[collection]
场景:有一个user对象,和一个Order对象,一个用户可以有多个订单。
一个User类如下:
class User { |
在这个例子中,User
类有一个 orders
属性(一个 List<Order>
)。collection
元素用于指定一对多的映射关系,ofType
属性指定集合中元素的类型。
<resultMap id="userResultMap" type="User" autoMapping = "true"> |
使用Mybatis-Plus的分页插件进行分页查询时,如果结果需要使用<collection>
进行映射,只能使用嵌套查询,而不能使用嵌套结果映射。
多对一映射[association]
场景:有一个 Order
对象,它关联到一个 User
对象。
class User { |
在这个例子中,Order
对象的 user
属性是通过 association
映射的,它表示多对一关系。
<resultMap id="orderResultMap" type="Order" autoMapping="true"> |
ResultMap中的属性
- property:映射的 Java 类的属性名称。
- column:数据库表中的列名。
- javaType:用于指定映射的 Java 类型。
- typeHandler:用于指定类型处理器,处理数据库列和 Java 属性之间的转换。
- ofType:用于集合映射时,指定集合中元素的类型。
- association:用于表示一对多或多对一关系映射。