MyBatis 动态 ResultMap。如何return列出不同的POJO对象?

MyBatis dynamic ResultMap. How to return list of different POJO objects?

MyBatis 映射问题。

假设我们有 table 个用户

CREATE TABLE USERS(
   USER_ID int(10) NOT NULL AUTO_INCREMENT,
   LOGIN varchar(100) NOT NULL,
   EMAIL varchar(255),
   SALARY int(10),
   AVG_SCORE int(10),
   PRIMARY KEY ( USER_ID )
);

还有 3 个 POJO 类 -

public class User {
    private Long id;
    private String login;
    private String email;

...getters/setters
}

还有两个 类 扩展用户

public class Student extends User {
    private Integer score;
...getters/setters
}

public class Teacher extends User {
    private Integer salary;
...getters/setters
}

和一个映射器(我用XML但实际上没关系)。

<select id="selectAll" resultMap="<dynamicResultMapHere>">
    SELECT * FROM USERS
    <some conditions here>
</select>

我想获得 List<Teacher>List<Student> 个实例,具体取决于 SALARY 列是否为空。

如何添加动态结果填充?

其实情况要复杂得多。我不知何故需要 return 不同的结果取决于查询参数。

检查 documentation 关于 鉴别器 。 对于 StudentTeacher 的特定字段,resultMap 需要 resultMap 用于 User(对于公共字段)和 <discriminator>部分。

可能需要伪列:

SELECT (CASE WHERE salary IS NULL THEN 1 ELSE 2 END) AS userType

然后

<discriminator javaType="int" column="userType">
    <case value="1" resultMap="studentResultMap" />
    <case value="2" resultMap="teacherResultMap" />
</discriminator>