使用mybatis中的sql显示一对多映射

时间:2013-04-24 13:46:56

标签: sql mysqli mybatis

我必须参加表格

Tasks:
 id
 title
 Description

Task_reply_mapping
task_id
parent_id

我编写了以下查询来获取数据

    select t1.id,t1.title,t1.description,t2.id,t2.title,t2.description
from tasks t1
left join Task_reply_mapping trm on t1.id =  trm.task_id 
    left join tasks t2 on t2.id = t1.id
    order by fe.created_at desc limit 0,10

这似乎工作正常,但它没有正确填充数据。我想知道这个查询是否正确?

在我的mapper文件中我有

  <resultMap id="TaskResultMap" type="com.mycom.myproj.bean.TaskBean">
    <id column="id" jdbcType="BIGINT" property="id" />
    <result column="title" jdbcType="VARCHAR" property="title" />
    <result column="description" jdbcType="VARCHAR" property="description" />
  <collection ofType="com.mycom.myproj.bean.TaskBean" property="replyTask">
    <id column="id" jdbcType="BIGINT" property="id" />
        <result column="title" jdbcType="VARCHAR" property="title" />
        <result column="description" jdbcType="VARCHAR" property="description" />
   </collection>
  </resultMap>

或者我在mapper类中做错了。

对象中的记录与第一个索引一样,放置最新的任务,无论是回复还是新任务等等。

它应该插入这样的记录

   Task1
     --1st reply task
     --2nd reply task
  Task 2
      --1st reply task
      --2nd reply task

如果需要更多信息,请与我们联系。

2 个答案:

答案 0 :(得分:1)

第二个join必须与Task_reply_mapping表格相同:

select t1.id,
       t1.title,
       t1.description,
       t2.id,
       t2.title,
       t2.description
  from tasks t1
       left join Task_reply_mapping trm
           on t1.id = trm.task_id 
       left join tasks t2
           on t2.id = trm.parent_id

Here is a demo.

答案 1 :(得分:1)

不确定问题出在哪里。

我想可能查询和映射不正确。

试试这个:

select 
    t1.id
    ,t1.title
    ,t1.description
    ,t2.id as id_2
    ,t2.title as title_2
    ,t2.description as description_2
from tasks t1
    left join Task_reply_mapping trm on t1.id =  trm.task_id 
    left join tasks t2 on t2.id = t1.id
order by fe.created_at desc limit 0,10

映射

<resultMap id="TaskResultMap" type="com.mycom.myproj.bean.TaskBean">
    <id column="id" jdbcType="BIGINT" property="id" />
    <result column="title" jdbcType="VARCHAR" property="title" />
    <result column="description" jdbcType="VARCHAR" property="description" />
    <collection ofType="com.mycom.myproj.bean.TaskBean" property="replyTask">
    <id column="id_2" jdbcType="BIGINT" property="id" />
        <result column="title_2" jdbcType="VARCHAR" property="title" />
        <result column="description_2" jdbcType="VARCHAR" property="description" />
   </collection>
</resultMap>

在您的查询中,您必须id,两个'标题and two描述,因此可能存在问题。