以下是一个基本的结果映射的例子:
<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