在MyBatis 3 XML映射文件中,结果映射(Result Mapping)用于定义如何将查询结果映射到Java对象或其他类型。结果映射主要使用 <resultMap> 元素进行配置。

以下是一个基本的结果映射的例子:
<resultMap id="userResultMap" type="com.example.model.User">
    <id column="id" property="id"/>
    <result column="username" property="username"/>
    <result column="password" property="password"/>
</resultMap>

在这个例子中:

  •  id 属性指定了结果映射的唯一标识。

  
  •  type 属性指定了映射到的Java对象类型。


  •  <id> 元素用于定义主键映射规则,<result> 元素用于定义普通字段的映射规则。


对于 <id> 元素:

  •  column 属性指定了数据库列名。


  •  property 属性指定了Java对象的属性名。


对于 <result> 元素:

  •  column 属性指定了数据库列名。


  •  property 属性指定了Java对象的属性名。


这样的配置告诉MyBatis如何将数据库查询结果映射到Java对象中。

嵌套结果映射:

你还可以配置嵌套的结果映射,使得一个结果映射中包含另一个结果映射。
<resultMap id="userResultMap" type="com.example.model.User">
    <id column="id" property="id"/>
    <result column="username" property="username"/>
    <result column="password" property="password"/>
    <!-- 嵌套结果映射 -->
    <association property="profile" resultMap="profileResultMap"/>
</resultMap>

<resultMap id="profileResultMap" type="com.example.model.Profile">
    <id column="profile_id" property="id"/>
    <result column="email" property="email"/>
    <result column="phone" property="phone"/>
</resultMap>

在这个例子中,userResultMap 中嵌套了一个 profileResultMap,association 元素用于配置嵌套的关联关系。

这样的嵌套结果映射使得在查询中可以同时获取两个实体的信息。

鉴别器(Discriminator):

鉴别器用于根据查询结果的某个列的值来判断使用哪个结果映射。
<resultMap id="vehicleResultMap" type="com.example.model.Vehicle">
    <id column="id" property="id"/>
    <result column="type" property="type"/>
    
    <discriminator javaType="int" column="type">
        <case value="1" resultMap="carResultMap"/>
        <case value="2" resultMap="bikeResultMap"/>
    </discriminator>
</resultMap>

<resultMap id="carResultMap" type="com.example.model.Car">
    <id column="id" property="id"/>
    <result column="brand" property="brand"/>
</resultMap>

<resultMap id="bikeResultMap" type="com.example.model.Bike">
    <id column="id" property="id"/>
    <result column="model" property="model"/>
</resultMap>

在这个例子中,vehicleResultMap 中的 discriminator 元素根据查询结果的 type 列的值来判断使用哪个结果映射。

总的来说,通过合理配置结果映射,你可以实现复杂的查询结果到Java对象的映射,满足各种数据关系的处理需求。


转载请注明出处:http://www.pingtaimeng.com/article/detail/7010/MyBatis