文档章节

Mybatis 查询结果和sql执行结果不符

learn_more
 learn_more
发布于 2016/03/16 16:46
字数 437
阅读 1K
收藏 2


问题

使用mybatis查询数据,看到执行sql的日志,同时也打印了查询的结果个数为3,可是通过 selectList 得到的 List list  却只有1条数据;


分析

一开始以为是缓存导致,因为mybatis有缓存,而且缓存的结果是可以改变的,可是二级缓存默认关闭,一级缓存必须在同一个 sqlsession对象的生命周期内,

这两个条件都排查了,没问题。


解决

然后,看到了select 的返回值是 resultMap , 沿着 resultMap 去看数据结构发现里面指定了一个字段为ID,问题就在这里,该表的主键是联合主键,有多个字段一起作为key,

所以查询的结果可不一定就是以这个ID作为识别记录的key,因为查询的结果ID都是一样的,所以Mybatis在封装ResultRow的时候只会有一条。

问题前(联合主键只指定了一个字段作为ID):

<resultMap id="TodoTask" type="map">
   <id column="businessId" property="businessId"></id>
   <result column="businessName" property="businessName"></result>
   <result column="todoUserId" property="todoUserId"></result>
   <result column="todoUserName" property="todoUserName"></result>
</resultMap>

问题后(联合主键的所有字段都作为ID):

<resultMap id="TodoTask" type="map">
   <id column="businessId" property="businessId"></id>
   <id column="businessName" property="businessName"></id>
   <id column="todoUserId" property="todoUserId"></id>
   <result column="todoUserName" property="todoUserName"></result>
</resultMap>


建议

另外为了提升性能,mybatis建议指定ID字段,所以如果你是采用 resultMap=“map” 作为返回结果,如果记录很多的话最好还是改改了,改成 resultType="",这样的好处就是可以自定义ID。


© 著作权归作者所有

learn_more
粉丝 93
博文 240
码字总数 210196
作品 0
深圳
程序员
私信 提问
加载中

评论(0)

JavaEE Mybatis使用

1. Mybatis官网 下载地址 解压之后的内容: Mybatis框架结构: 简要概述: 2. 导入数据库表 1). 使用Navicat工具,在root上右键选择新建数据库 2). 新建数据库->确定 -- -------------------...

凌浩雨
2018/04/12
0
0
Mybatis 示例之 Association (2)

版权声明:版权归博主所有,转载请带上本文链接!联系方式:abel533@gmail.com https://blog.csdn.net/isea533/article/details/21007559 接上篇:Mybatis 示例之 Association 上一篇讲到了a...

isea533
2014/03/11
0
0
《深入理解mybatis原理》 MyBatis的一级缓存实现详解 及使用注意事项

MyBatis是一个简单,小巧但功能非常强大的ORM开源框架,它的功能强大也体现在它的缓存机制上。MyBatis提供了一级缓存、二级缓存 这两个缓存机制,能够很好地处理和维护缓存,以提高系统的性能...

java梦想家01
2016/01/11
612
1
Mybatis+0+null,小问题引发的血案

Mybatis在进行判空操作时,如果status为0的时候,该判断条件的值为false,也就是说Mybatis此时把0作为null来进行判断的,所以遇到这种情况时,只能按照下面这个方法来办! 一、源码调查结果 ...

LYQ1990
2018/06/29
43
0
Mybatis学习系列(七)缓存机制

Mybatis缓存介绍 MyBatis提供一级缓存和二级缓存机制。 一级缓存是Sqlsession级别的缓存,Sqlsession类的实例对象中有一个hashmap用于缓存数据。不同的Sqlsession实例直接hashmap互不影响。M...

仍是少年
2018/07/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Java基本程序设计结构

简述 Java起源于Sun公司为机顶盒开发的一款开发语言“Oak”,由于该名称被抢注更名为“Java”。Java是基于面向对象的开发语言,其特性在于“一次编译,到处运行”,这实现依赖于JVM。 Java程...

Yongy
5分钟前
9
0
【jquery仿dataList——性能优化】模板预编译思想提高性能10倍以上!!!

那撒,IE和google性能不减反增,求高手解释....... 前言 呵呵,当然,什么预编译什么性能提高5倍以上基本上市坑爹的,这里就是为了吸引阅读量,哈哈。 上当的大哥主动顶下哇??? 正题 之前...

shzwork
9分钟前
45
0
用博客系统开发作文网站探索MYSQL数据库性能和缓存技巧[图]

用博客系统开发作文网站探索MYSQL数据库性能和缓存技巧[图] 最近忙着建站,感觉现在建站是越来越难了,但还是用ZBLOG系统建了一个作文网站,叫做求索作文网,但是发现博客系统的缺点也还是有...

原创小博客
11分钟前
25
0
LinearLayout不在ScrollView内扩展

我在ScrollView中有一个LinearLayout ,它有android:layout_height="fill_parent" ,但它没有扩展到ScrollView的整个高度。 我的布局看起来像: level layout layout_width layout_......

技术盛宴
30分钟前
20
0
docker上启动nginx,并配置修改nginx的配置文件

1.使用docker 下载nginx 镜像 docker pull nginx 2.启动nginx docker run --name nginx -p 80:80 -d nginx 这样就简单的把nginx启动了,但是我们想要改变配置文件nginx.conf ,进入容器,命令...

yuxw
34分钟前
45
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部