2 u012819950 u012819950 于 2015.07.27 10:28 提问

求助:mybatis association 关联查询时,只返回第一条记录

1、这个是配置文件

<resultMap type="User" id="userResultMap">
    <!-- 属性名和数据库列名映射 -->
    <id property="id" column="id"  />
    <result property="userName" column="userName"  />
    <result property="userPwd" column="userPwd" />
</resultMap>

<resultMap type="Article" id="articleResultMap" >
    <id property="id" column="id" />
    <result property="title" column="title" />
    <result property="content" column="content" />
    <!-- 将article的user属性映射到userResultMap -->
    <association property="user" resultMap="userResultMap" /> 
</resultMap>

<!--查询-->
<select id="getUserArticles" parameterType="int" resultMap="articleResultMap" >
    select user.id,user.userName,user.userPwd,article.title,article.content
    from user,article where user.id = article.userId and user.id = #{id}
</select>

2、select user.id,user.userName,user.userPwd,article.title,article.content
from user,article where user.id = article.userId and user.id = 1 这条sql语句在mysql中查询是有5条记录的,但是在代码中就只有一条记录

3、public List getUserArticles(int id);
这个是接口

11个回答

strutce
strutce   Ds   Rxr 2015.07.27 11:40

图片说明

sina_2831808769
sina_2831808769   Rxr 2015.07.27 22:20

以user为主表只有1条记录

ipenglei
ipenglei   2016.01.09 02:40


select user.id,user.userName,user.userPwd,article.title,article.content
from user,article where user.id = article.userId and user.id = #{id}

这个查询里面没有查 article.id

u011320740
u011320740   2016.05.06 14:40

改成这样select article.id,article.title,article.content, user.id,user.userName,user.userAddress from user,article where user.id=article.userid and user.id=#{id}
其实就是把article表的字段写在前面,这样就article为主了

zjq78577117
zjq78577117   2015.07.27 10:34

你的id是user表里面的主键吧,怎么查也不会有五条记录吧

zjq78577117
zjq78577117 回复HaoBiaoSheng:问题解决了没?
接近 3 年之前 回复
zjq78577117
zjq78577117 回复HaoBiaoSheng: 我刚才写了一个,返回和执行sql数据库查询是一样的
接近 3 年之前 回复
zjq78577117
zjq78577117 回复HaoBiaoSheng: 我刚才写了一个,返回和执行sql数据库查询是一样的
接近 3 年之前 回复
zjq78577117
zjq78577117 回复HaoBiaoSheng: 我刚才写了一个,返回和执行sql数据库查询是一样的
接近 3 年之前 回复
u012819950
u012819950 你是指:public List getUserArticles(int id); 这个id 值?这个id 值是user表里的主键来的
接近 3 年之前 回复
strutce
strutce   Ds   Rxr 2015.07.27 10:36

这个是因为你返回的user表只有一条记录,在这条记录里有个articleResultMap中有个属性字段来保article表的数据看你写的是user属性(user.user)这样的情况下,他才是5条件记录

u012819950
u012819950 回复丵鹰: 还是不太懂,我得怎样改才能得到一个user 所有的article呢???
接近 3 年之前 回复
u012819950
u012819950 回复丵鹰: 还是不太懂,我得怎样改才能得到一个user 所有的article呢???
接近 3 年之前 回复
strutce
strutce 回复HaoBiaoSheng: 你可以断点一下,把返回来的结果集打开看下,也许这样你更好理解
接近 3 年之前 回复
strutce
strutce 回复HaoBiaoSheng: 你可以点的下,把返回来的结果集打开看下,也许这样你更好理解
接近 3 年之前 回复
strutce
strutce 回复HaoBiaoSheng:先申明user.的user是你返回来的结果集 返回的字段类型是user表的字段,现在你在这个user实体类里加了一个articleList字段的数据,通过association查询到的结果就放在articleList里,这样就是user.getArticleList()有5条记录,现在你是把他赋值在user上所以就是user.getUser()有5条记录
接近 3 年之前 回复
u012819950
u012819950 user.user??不太懂你的意思哦,可以说仔细点么?不好意思,刚接触mybatis ,你是说我的配置文件有错还是?
接近 3 年之前 回复
zjq78577117
zjq78577117   2015.07.27 11:11

我写的例子:我刚才试了一下,和数据库查询一样的。

在UserMapper.xml中

 <!-- resultMap
  sql语句同resultType实现的sql

  使用resultMap将查询结果中的订单信息映射到Orders对象中,
  在orders类中添加User属性,将关联查询出来的用户信息映射到orders对象中的user属性中。

  定义resultMap
  订单关联查询关联用户的resultMap
 将整个查询的结果映射到Orders类中
 -->
<resultMap type="orders" id="ordersUserResultMap">
    <!-- 配置映射的订单信息 -->
    <!-- id:指定查询列中的唯一标识,订单信息的中的唯一标识,如果有多个列组成唯一标识,配置多个id
         column:订单信息的唯一标识 列
         property:订单信息的唯一标识  列 所映射到Orders中的哪个属性 -->
     <id column="id" property="id"/>
     <result column="user_id" property="userId"/>
     <result column="createtime" property="createtime"/>
     <result column="note" property="note"/>
     <!-- 配置映射的关联的用户信息 -->
     <!-- association:用于映射关联查询单个对象的信息
          property:要将关联查询的用户信息映射到Orders中哪个属性 -->
     <association property="user" javaType="user">
        <!-- id:关联查询用户的唯一标识
             column:指定唯一标识用户信息的列 
             javaType:映射到user的哪个属性-->
         <id column="user_id" property="id" />
         <result column="username" property="username" />
         <result column="sex" property="sex"/>
         <result column="address" property="address"/>

     </association>
</resultMap>
<!-- 测试一对多查询  -->
<!-- 查询订单关联查询用户信息,使用resultMap -->
<select id="findOrdersUserResultMapById" parameterType="int" resultMap="ordersUserResultMap">
    select 
       orders.*,
       user.username,
       user.sex,
       user.address
     from
       orders,
       user
     where orders.user_id = user.id
     and user.id=#{id}
</select>

在UserMapper接口中添加

    //测试用
    public List<Orders> findOrdersUserResultMapById(int id) throws Exception;


执行单元测试

@Test
    public void findOrdersUserResultMapById() throws Exception {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        userMapper = sqlSession.getMapper(UserMapper.class);
        //调用userMapper的方法
        List<Orders> list = userMapper.findOrdersUserResultMapById(1);
        System.out.println(list);
    }

    控台打印
    DEBUG [main] - ==>  Preparing: select orders.*, user.username, user.sex, user.address from orders, user where orders.user_id = user.id and user.id=? 
DEBUG [main] - ==> Parameters: 1(Integer)
DEBUG [main] - <==      Total: 2
[Orders [id=3, userId=1, number=null, createtime=Wed Feb 04 13:22:35 CST 2015, note=null, user=User [id=1, username=王五, sex=2, birthday=null, address=null, orders=[]], orderdetails=[]], Orders [id=4, userId=1, number=null, createtime=Tue Feb 03 13:22:41 CST 2015, note=null, user=User [id=1, username=王五, sex=2, birthday=null, address=null, orders=[]], orderdetails=[]]]

 去数据库执行
 select orders.*, user.username, user.sex, user.address from orders, user where orders.user_id = user.id and user.id=1
 ![图片说明](https://img-ask.csdn.net/upload/201507/27/1437966559_138292.jpg)
strutce
strutce   Ds   Rxr 2015.07.27 11:33



<!-- 将article的user属性映射到userResultMap -->
//articleList这个要加到user实体类中当一个字段,不过最好写在扩展类中

这样的结果集中就有你想要的article的数据articleList了

strutce
strutce   Ds   Rxr 2015.07.27 11:35



<!-- 将article的user属性映射到userResultMap -->
//articleList这个要加到user实体类中当一个字段,不过最好写在扩展类中



strutce
strutce   Ds   Rxr 2015.07.27 11:40
 ![图片说明](https://img-ask.csdn.net/upload/201507/27/1437968451_474580.png)
共11条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
mybatis 关联查询时,从表只返回第一条记录解决办法
如果两表联查,主表和明细表的主键都是id的话,明细表的多条只能查询出来第一条。   造成以上情况可能的原因:   1、级联查询的时候,主表和从表有一样的字段名的时候,在mysql上命令查询是没问题的。但在mybatis中主从表需要为相同字段名设置别名。设置了别名就OK了。 例子: 主表Standard, 从表StandEntity,均有名为id的字段 1
mybatis association 关联查询 只返回一条记录
如果两表联查,主表和明细表的主键都是id的话,明细表的多条只能查询出来第一条。   造成以上情况可能的原因:   1、级联查询的时候,主表和从表有一样的字段名的时候,在mysql上命令查询是没问题的。但在mybatis中主从表需要为相同字段名设置别名。设置了别名就OK了。 例子: 主表Standard, 从表StandEntity,均有名为id的字段 1 "StandardA
Mybatis 只使用了association时,结果只出一条
类的成员变量只有两个复杂对象,没有指定ID.  因此在resultmap中 我就没有指定。结果只返回一条数据。 这里将其中一个对象的id指定为即可。(根据需求。) 参考 http://bbs.csdn.net/topics/390999744 6楼。
mybatis 关联查询只返回一条数据
mybatis 关联查询只返回一条数据,主要原因是主键id映射错误。也就是关联的表的主键名称相同,只要给主键id取别名就可以了。
MyBatis基础篇之使用association解决一对一关联查询
一、前言上一章节&amp;lt;&amp;lt;MyBatis基础篇之结果映射ResultMap级联属性封装&amp;gt;&amp;gt;,我们通过级联属性的方式,将角色中的数据查出来封装到用户User的role属性里面,我们还有另外一种方式来实现数据的封装。接下来我们将介绍一下association标签的相关用法,包括嵌套查询和分段查询两种方式。二、案例♦参照前面介绍的相关章节,如&amp;lt;&amp;lt;MyBatis基础篇之简单入...
mybatis 关联查询原本返回数组,结果只返回了第一条数据怎么办?
今天出了一个小问题,就是在MyBatis数据库中查询一组数据,原本应该返回的是一组List&amp;lt;entity&amp;gt;类型的一组数据,但是调用接口之后只返回了第一跳查询数据。当时修改了resultMap、parameterType还有实体类等等都没搞定。最后才发现,原来是再查询语句中返回值没有携带返回数组实体类的id字段。所以....只要再select查询语句返回值里添加对应的实体类id就可以搞定...
关于MyBatis关联查询 (association)映射为空的问题
今天在写mybatis一对一关联查询的时候发现关联查询有数据,但是始终查不出来,sql也有打印语句,看了半天也没找到问题 后来仔细对照了下数据库表,发现是我result里的column跟property两个值写反了,真是粗心大意,改了后就OK了 特此在这记录一下
mybatis Association标签 分两次sql查询时,参数传递问题
直接给个例子,该例子来自:http://www.cnblogs.com/xdp-gacl/p/4264440.html<!-- 37 方式二:嵌套查询:通过执行另外一个SQL映射语句来返回预期的复杂类型 38 SELECT * FROM class WHERE c_id=1; 39 SELECT * FROM teacher WHERE t_id=1 /
MyBatis的resultMap只返回一条数据的解决方法
resultMap下有association和collection association用于多对一或者一对一,collection用于一对多。 在这里为了测试只能返回一条数据,以及如何解决这个问题。我用了一个学生类和班级类。 学生类中添加了一个班级类的属性: 班级类添加了一个学生的集合: StudentDao.xml关键代码:
MyBatis的collection只能查询一条记录
转自 http://blog.csdn.net/LoveCarpenter/article/details/60958710 深坑描述深坑原因深坑解决总结 1 深坑描述       我数据库中有三张表,暂且记作 表A,表B,表C,他们之间的关系如下图所示: 我创建的持久化类A: 当我进行数据库查询的时候,执行的SQL语句是没有问题的,但