Mybatis一对多,查询列表时如何关联子表数据?

车开源 发布于 2016/07/08 11:23
阅读 1K+
收藏 1

最近在折腾MyBatis,练习中在研究怎么在读取主表List的时候,怎么把每记录所对应的子表数据一并查出来,在折腾一番后要向OSCER们求助了。

get主表一条数据时,查出子表数据没问题(以同样的方法配置在List主表数据时不行),求教!!谢谢

加载中
0
求是科技
求是科技
http://my.oschina.net/u/2312022/blog/519714
0
阿信sxq
阿信sxq

你看一看这个

<!-- 
        嵌套查询:通过执行另外一个SQL映射语句来返回预期的复杂类型
            SELECT * FROM class WHERE c_id=1;
            SELECT * FROM teacher WHERE t_id=1   //1 是上一个查询得到的teacher_id的值
            SELECT * FROM student WHERE class_id=1  //1是第一个查询得到的c_id字段的值
     -->
    <select id="getClass4" parameterType="int" resultMap="ClassResultMap4">
        select * from class where c_id=#{id}
    </select>
    <resultMap type="Classes" id="ClassResultMap4">
        <id property="id" column="c_id" />
        <result property="name" column="c_name" />
        <association property="teacher" column="teacher_id" javaType="Teacher" select="getTeacher2"></association>
        <collection property="students" ofType="Student" column="c_id" select="getStudent"></collection>
    </resultMap>

    <select id="getTeacher2" parameterType="int" resultType="Teacher">
        SELECT t_id id, t_name name FROM
        teacher WHERE t_id=#{id}
    </select>

    <select id="getStudent" parameterType="int" resultType="Student">
        SELECT s_id id, s_name name FROM
        student WHERE class_id=#{id}
    </select>



0
小虫0302
小虫0302
这样做多出N个查询
车开源
车开源
是的,感觉这样很不好
0
huan
huan
mybatis有两种一对多的方式,一种是上面列出来的级联查询方式,这种方式会带来典型的N+1问题,在实际项目中不推荐使用,另外一种是用关联查询的方式,一般都用这种方式,具体做法可以看看mybatis文档,里面写的很清楚。个人经验主要就是注意需要设置正确的ID属性即可。
返回顶部
顶部