Mybatis 一对多怎么映射

比如有一个实体类

public class AnswerDto{ //一个回复的类,一个问题可能会有多个回复
    int id;
    int askId;//问题id
    List<String> answers; //回复的列表
}

clipboard.png

我原本这么写,但是是错的 T0T, 应该如何将content映射到List<String>

<select id="getAns" parameterType="int" resultMap="uiy">
    select
    id, 
    ask_id AS "askId",
    content
    from t_answer where ask_id = #{_parameter}
</select>

<resultMap type="AnswerDto" id="uiy">
    <id property="id" column="id"/>
    <result property="askId" column="askId" />
    <collection property="ls" ofType="string">
        <constructor>
            <arg column="content"/>
        </constructor>
    </collection>
</resultMap>
阅读 6.1k
3 个回答

mybatis是根据<id>标签确定集合映射关系的, 如果一定要用你这个表的话可以这样映射

<id column="askId" property="askId" />
<result column="id" property="id"/>
<collection property="answers" ofType="java.lang.String" javaType="java.util.List">
    <result column="content" />
</collection>
新手上路,请多包涵

楼主这里应该还少了一张表,就是问题表。

配合问题表,DTO的定义应该是这样的。

public class QuestionDTO {
     int questionId;
     String questionDesc;
     List<AnswerDTO> answers; // Answers of the question
     int created; // 创建时间
     int updated; // 更新时间
}

public class AnswerDTO{ //一个回复的类,一个问题可能会有多个回复
    int id;
    int questionId; // 问题id
    String content; // 答案内容
    int created; // 创建时间
    int updated; // 更新时间
}

这个时候 mybatis 的关联查询解决方案有很多,我附上一个链接吧。

Mybatis关联查询(嵌套查询)

mybatis 的关联查询网上资料蛮多的,楼主可以多搜搜。

最后提一个建议,最好不要进行关联查询。数据的组装逻辑放在代码里面来做,这样方便以后 DB 的改造。因为随着数据量越来越大,关联查询性能比较糟糕,还不容易做分库分表的改造,不过这都是建立在业务有大量增长的情况下。当前的话,楼主开始培养这个意识就好啦。

新手上路,请多包涵

表字段到复杂对象字段的映射可以采用自定义TypeHandler的方式搞定。
eg:
MyBatis里json型字段到Java类的映射
http://www.cnblogs.com/watery...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题