MYBATIS一对多关系取出的数据只包含子表的第一条记录信息,而不是一个集合,怎么办?

来源:-

ABCzhouxueqin

2015-08-30 15:35

在MyBatis一对多的关系中,按照老师的方法配置了COMMAND表和COMMAND_CONTENT表对应的JAVA类和相应的XML文件,执行后,在控制台的DEBUG级别的日志显示结果为4条数据,封装到COMMAND类对象中是一条数据,从COMMAND对象中再取它的LIST<CommandContent>链表,理应为4个CommandContent类的对象才合情合理,但执行结果只有一条,第一条记录。

郁闷,不知是什么原因?请老师或者热心人给予帮助。 也可QQ联系我:372102668

万分感谢。

这是我的JAVA类及相应的XML

(1)Command.java

package cn.sdut.bean;

import java.util.List;

public class Command {

private int id;

private String command;

private String description;

private List<CommandContent> contents;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getCommand() {

return command;

}

public void setCommand(String command) {

this.command = command;

}

public String getDescription() {

return description;

}

public void setDescription(String description) {

this.description = description;

}

public List<CommandContent> getContents() {

return contents;

}

public void setContents(List<CommandContent> contents) {

this.contents = contents;

}

(2)CommandContent.java

package cn.sdut.bean;

public class CommandContent {

private int id;

private String content;

private int commandId;

public int getCommandId() {

return commandId;

}

public void setCommandId(int commandId) {

this.commandId = commandId;

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getContent() {

return content;

}

public void setContent(String content) {

this.content = content;

}

}

(3) Command.xml

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE mapper

    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="Command">


  <resultMap type="cn.sdut.bean.Command" id="CommandResult">

    <id column="id" jdbcType="INTEGER" property="id"/>

    <result column="command" jdbcType="VARCHAR" property="command"/>

    <result column="description" jdbcType="VARCHAR" property="description"/>

    <collection property="contents" resultMap="Content.ContentResult"></collection>

  </resultMap>


   <select id="commandList" parameterType="cn.sdut.bean.Command" resultMap="CommandResult"> 

      SELECT a.id,command,description,content 

      FROM command a,command_content b  

      

      <where>

        a.id=b.command_id

      <if test="command!=null and !&quot;&quot;.equals(command.trim())">

        and a.command like '%' #{command} '%'

      </if>    

      </where>

    </select> 

</mapper>

(4)CommandContent.xml

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE mapper

    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">


<mapper namespace="Content">

   <resultMap type="cn.sdut.bean.CommandContent" id="ContentResult">

    <id column="id" jdbcType="INTEGER" property="id"/>

    <result column="content" jdbcType="VARCHAR" property="content"/>

    <result column="command_id" jdbcType="INTEGER" property="commandId"/>

  </resultMap>

</mapper>

(5) 数据库中的2个表的定义SQL语句:

create table command(

id int primary key auto_increment,

command varchar(20) ,

description varchar(40)

)

create table command_content(

  id int primary key auto_increment,

  content varchar(2048),

  command_id int

)


写回答 关注

5回答

  • 花落以忘秋
    2017-12-13 14:37:26

    刚解决,应该是列名一致了

  • 用户1088016
    2017-05-05 20:02:53

    两个表的id字段不要都叫id,需要不一样。或者可以在查询的时候取别名

  • 慕姐8479133
    2016-09-16 11:49:34

    同样的问题 ,数据库查询没问题 

  • qq_孤单心事_1
    2016-08-22 13:56:30

    你可以先把你的sql复制一下,到数据库中执行以下,看看可以查到几点数据?

  • qq_Heartbreak_03253392
    2016-04-25 16:32:09

    同样的问题。 求楼主分享

通过自动回复机器人学Mybatis---加强版

进一步探索 Mybatis 的奥秘,一起揭开 Mybatis 面纱

53657 学习 · 121 问题

查看课程

相似问题