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

问题描述

请问为什么我的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个啊,郁闷

解决方案

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

解决方案二:

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

解决方案三:

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

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

                    第一行有这个jikeUser但是后面的没有
            你不妨把列名加上和这个resultmap中的东西对应起来

解决方案四:

你可以看看我的博客:http://blog.csdn.net/u014427391/article/details/51287036

时间: 2024-10-17 10:25:49

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

mybatis-MyBatis关联查询查不到数据,日志没有报错

问题描述 MyBatis关联查询查不到数据,日志没有报错 shoppingcard表 food表 Sql语句查询 ShoppingCardMapper.xml 实体类ShoppingCard 测试类 日志 麻烦这方便比较熟悉的高手指点一下.谢谢 解决方案 MyBatis 关联查询Mybatis关联查询Mybatis关联查询(嵌套查询) 解决方案二: http://bbs.csdn.net/topics/391836443 解决方案三: 你的实体类和表的字段不一致,所以sql语句要用别名

MySQL查询倒数第二条记录实现方法_Mysql

有时候会用到查询倒数第二条记录 复制代码 代码如下: last=HolderChangeHistory.find_by_sql (["               SELECT * FROM holder_change_histories                   where treasure_id = ?                   order by id desc                     limit   1,1  ",               

hibernate 查询40万条记录出现 java.sql.SQLException 数字溢出 异常

问题描述 大家好,我用hibernate 查询40万条记录,结果出现 java.sql.SQLException 数字溢出 异常,怎么回事啊?难道 hibernate 支持不了几十万的数据检索???我的代码: List list = session.createQuery("from 表 ").list(); 解决方案 你有没有设置Lazy Loading呀..如果你设的为立即加载的话,几十万的话数据.溢出很正常呀..解决方案二:大哥 你一起弄这么多数据出来能不溢出么?用LAZY解决方

SQL Server查询前N条记录的常用方法小结_MsSql

本文实例讲述了SQL Server查询前N条记录的常用方法.分享给大家供大家参考.具体如下: SQL Server查询前N条记录是我们经常要用到的操作,下面对SQL Server查询前N条记录的方法作了详细的介绍,如果您感兴趣的话,不妨一看. SQL Server查询前N条记录: 因为id可能不是连续的,所以不能用取得10<id<20的记录的方法. 有三种方法可以实现: 一.搜索前20条记录,指定不包括前10条 语句: 复制代码 代码如下: select top 20 * from tbl w

SQLServer 分组查询相邻两条记录的时间差

原文:SQLServer 分组查询相邻两条记录的时间差 首先,我们通过数据库中表的两条记录来引出问题,如下图 以上为一个记录操作记录的表数据.OrderID为自增长列,后面依次为操作类型,操作时间,操作人. 现在的问题是:要求筛选出数据库中从"接收"到"送出"的时间差超过2天的全部记录.即如上图两笔单据中,红色框既是要筛选出的,绿色框为正常过滤的. 为了定位相邻记录,方法为给查询语句的返回记录加个自动编号列放入临时表中,再对临时表进行操作. View Code --

不同数据库中查询前几条记录的用法(SQL Server/Oracle/Postgresql)

SQL在不同数据库中查询前几条记录的用法分类 1. orACLE Select * FROM TABLE1 Where ROWNUM<=N 2. INFORMIX Select FIRST N * FROM TABLE1 3. DB2 Select * ROW_NUMBER() OVER(ORDER BY COL1 DESC) AS ROWNUM Where ROWNUM<=N 或者Select COLUMN FROM TABLE FETCH FIRST N ROWS ONLY 4. SQL

DEV Gridcontrol 查询得到0条记录时显示自定义的字符提示/显示

private void gridView_CustomDrawEmptyForeground(object sender, DevExpress.XtraGrid.Views.Base.CustomDrawEventArgs e) { if (this.judge_ds(dsDt)) { string str = "没有查询到你所想要的数据!"; Font f = new Font("宋体", 10, FontStyle.Bold); Rectangle r =

查询1000000万条记录,如何优化SQL语句

问题描述 table busi 有1000000万记录.有一句Sql:          select ID, name, ... from  busi where id=:value1 and name=:value2;请问此时该如何提高该SQL的执行效率? 问题补充:<div class="quote_title">Fangrn 写道</div><div class="quote_div">id,name字段建索引,不知道你i

MyBatis实践之动态SQL及关联查询_MsSql

序言 MyBatis,大家都知道,半自动的ORM框架,原来叫ibatis,后来好像是10年apache软件基金组织把它托管给了goole code,就重新命名了MyBatis,功能相对以前更强大了.它相对全自动的持久层框架Hibernate,更加灵活,更轻量级,这点我还是深有体会的. MyBatis的一个强大特性之一就是动态SQL能力了,能省去我们很多串联判断拼接SQL的痛苦,根据项目而定,在一定的场合下使用,能大大减少程序的代码量和复杂程度,不过还是不是过度太过复杂的使用,以免不利于后期的维护