2 wulongbang7370 wulongbang7370 于 2016.04.30 13:43 提问

请问为什么我的mybatis 关联查询只有一条记录,但是日志打印出来的Total: 3, 谢谢

SELECT * FROM JiKeUser;
这个里面有如下三条记录,

     id  userName   password  
------  ---------  ----------
     2  jike00100  666666    
     3  jike00200  888888    
     8  author001  123456    

SELECT * FROM author;
这个里面也是三条记录,

     id  realName      userID  IDCard  
------  ------------  ------  --------
     1  一个大牛               8  (NULL)  
     2  bbb                2  (NULL)  
     3  aaaaaa             3  (NULL)  

这样关联查询自然也是三条,

 SELECT * FROM author INNER JOIN jikeUser 
            ON jikeuser.id=author.userID ;

在java中的映射也就是author对象中有个引用指向jikeuser,

 public class Author {
    private Integer id; //自增主键
    private JiKeUser jikeUser; //外键引用JiKeUser表
    private String realName;//真实姓名
    private String IDCard;//身份证

可是我用如下方法查询却只查询出来一个记录,
这是配置文件


    <resultMap id="JiKeAuthorMap" type="Author">
        <id property="id" column="author.id" />
        <result property="realName" column="realName" />
        <result property="IDCard" column="IDCard" />
        <association property="jikeUser" column="userID"
            javaType="JiKeUser">
            <id property="id" column="jikeUser.id" />
            <result property="userName" column="userName" />
            <result property="password" column="password" />
        </association>
    </resultMap>

    <select id="selectAuthorJoin" resultMap="JiKeAuthorMap">
        select * from author inner join jikeUser 
            on jikeuser.id=author.userID
    </select>
下面是java代码
    List<Author> ap=session.selectList("selectAuthorJoin");//联合查询 
            System.out.println(ap.size());   //1
但是如下的日志里面的total倒是对的,是3,
    2016-04-30 05:33:43,781 [main] DEBUG [/.selectAuthorJoin] - ==>  Preparing: select * from author inner join jikeUser on jikeuser.id=author.userID 
  2016-04-30 05:33:43,806 [main] DEBUG [/.selectAuthorJoin] - ==> Parameters: 
  2016-04-30 05:33:43,819 [main] DEBUG [/.selectAuthorJoin] - <==      Total: 3

可就是查询出来的list的size就是1个啊,郁闷

4个回答

zmcmm
zmcmm   2016.04.30 16:04

不要select*,把别名加上试试

wulongbang7370
wulongbang7370   2016.04.30 19:37

select * from author join jikeUser
on jikeuser.id=author.userID, 要修改要什么别名啊,谢谢

fk002008
fk002008   2016.04.30 23:43

首先呢你的数据库查询出来是3条而且程序也没有报错,
因此你的别名什么的是ok的

既然java中取出的是一条那么就是说明这个xml中的map有问题了。



                    第一行有这个jikeUser但是后面的没有
            你不妨把列名加上和这个resultmap中的东西对应起来
fk002008
fk002008 id property="id" column="author.id" 下面的没有加这个author.
大约 2 年之前 回复
wulongbang7370
wulongbang7370 不好意思,这个csdn 真是够bug的,我几下回车就变这样了 ,我如下做了还是不行, <select id="selectAuthorJoin" resultMap="JiKeAuthorMap"> select author.id,realName,IDCard,jikeUser.id,username,password from author join jikeuser on jikeuser.id=author.userID </select> 还有啊,你说的‘ 第一行有这个jikeUser但是后面的没有‘是什么意思啊’’
大约 2 年之前 回复
wulongbang7370
wulongbang7370 谢谢,我如下做了还是不行,
大约 2 年之前 回复
wulongbang7370
wulongbang7370 谢谢,我如下做了还是不行,
大约 2 年之前 回复
u014427391
u014427391   2016.05.01 00:34
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
mybatis 关联查询只返回一条数据
mybatis 关联查询只返回一条数据,主要原因是主键id映射错误。也就是关联的表的主键名称相同,只要给主键id取别名就可以了。
Mybatis Collection查询集合只出现一条数据
大坑 如果两表联查,主表和明细表的主键都是id的话,明细表的多条只能查询出来第一条。
mybatis一对多查询过程只查询了一个结果
新学mybatis,在一对多关联查询过程中出现了一点bug 首先附上我的代码 User.java public class User { public User() { // TODO Auto-generated constructor stub } private String userName; private String passWord; private in
MyBatis的collection只能查询一条记录
转自 http://blog.csdn.net/LoveCarpenter/article/details/60958710 深坑描述深坑原因深坑解决总结 1 深坑描述       我数据库中有三张表,暂且记作 表A,表B,表C,他们之间的关系如下图所示: 我创建的持久化类A: 当我进行数据库查询的时候,执行的SQL语句是没有问题的,但
mybatis 关联查询原本返回数组,结果只返回了第一条数据怎么办?
今天出了一个小问题,就是在MyBatis数据库中查询一组数据,原本应该返回的是一组List&amp;lt;entity&amp;gt;类型的一组数据,但是调用接口之后只返回了第一跳查询数据。当时修改了resultMap、parameterType还有实体类等等都没搞定。最后才发现,原来是再查询语句中返回值没有携带返回数组实体类的id字段。所以....只要再select查询语句返回值里添加对应的实体类id就可以搞定...
(4)深坑之MyBatis只能查询一条记录
深坑描述 深坑原因 深坑解决 总结1 深坑描述      我数据库中有三张表,暂且记作 表A,表B,表C,他们之间的关系如下图所示:我创建的持久化类A:当我进行数据库查询的时候,执行的SQL语句是没有问题的,但是work和treatises两个集合总是只有一个数据(按理说work里面应该有3个数据,treatises应该有4个数据)2 深坑原因产生这种问题的原因,是因为两个数据库的主键都叫做id:如
解决mybatis一对多,但是list中只有一条数据的问题
今天碰到一个问题,记录一下,对mybatis返回数据应生成对象的时候,每一条记录都对应了一个对象,这就造成了,对象中的list属性中只有一个对象。也就是一对多变成了多条一对一。过程如下:这是数据库返回的记录,一共57条这是组成的实体对象。一共57个这就造成了上述的现象,一对多变成了多条一对一。造成这种现象的原因mysql查询的结果中,返回的列没有用于区分权限的id,在这里就是指privi_id,也...
Mybatis查询到多条记录但是映射到list集合只有一条或者条数不对
如果你出现了这个问题。 *. 原因:mybatis是基于当前实体对象的id进行映射的 *.所以在查询字段中加上查询id即可。 搞定!!!!
Mybatis 只使用了association时,结果只出一条
类的成员变量只有两个复杂对象,没有指定ID.  因此在resultmap中 我就没有指定。结果只返回一条数据。 这里将其中一个对象的id指定为即可。(根据需求。) 参考 http://bbs.csdn.net/topics/390999744 6楼。
Mybatis select返回多个list,但为啥只有一条记录
问题描述 本人做一个SSM项目,发现查询数据库数据,sql没有错,在Navicat中查询也是没有问题,但 返回数据只有一条,很奇怪,看网上教程,也都是差不多的教程,按理说我的mapper文件是没错的,因为其他一样的查询却可以查询出多条数据,同样的mapper写法。 解决方法 我对比了一下两者之间的sql差异,发现可能是在mapper中返回的字段比sql中多,再想是不是这个原因造成的,也有可能...