mybatis 动态resulttype
时间: 2023-09-01 16:10:57 浏览: 307
MyBatis 动态 ResultType 是一种在运行时动态设置查询结果类型的方式,可以根据不同的条件返回不同的结果类型。在 MyBatis 中,可以使用 `<resultMap>` 标签来定义查询结果映射关系,然后在 SQL 映射文件中使用 `<resultMap>` 标签中定义的 ID 来指定查询结果类型。但是,在有些情况下,我们需要在运行时动态设置查询结果类型,比如查询结果可能是多个实体类中的任意一个,这时就可以使用动态 ResultType。
MyBatis 提供了两种方式来实现动态 ResultType:
1. 使用 `resultType` 属性和 `<choose>` 标签结合,根据条件选择不同的结果类型。
示例代码:
```
<select id="selectOne" resultType="java.lang.Object">
<choose>
<when test="condition1">
<result property="prop1" column="column1" />
<result property="prop2" column="column2" />
...
</when>
<when test="condition2">
<result property="prop3" column="column3" />
<result property="prop4" column="column4" />
...
</when>
...
</choose>
</select>
```
2. 使用 `<resultMap>` 标签和 `<discriminator>` 标签结合,根据某个列的值选择不同的结果类型。
示例代码:
```
<resultMap id="resultMap" type="java.lang.Object">
<discriminator javaType="java.lang.String" column="type">
<case value="type1" resultMap="resultMap1" />
<case value="type2" resultMap="resultMap2" />
...
</discriminator>
</resultMap>
<select id="selectOne" resultMap="resultMap">
SELECT type, column1, column2, ... FROM table WHERE ...
</select>
```
这两种方式都可以实现动态 ResultType,具体使用哪种方式可以根据实际情况选择。
阅读全文