mybatis 查询之神坑

先看一个示例:

数据表数据:

mybatis类和查询语句:

1. 当UserInfoMap中所有字段(包含association)都为NULL的话,getUserInfo的返回结果是个null,即使查询的记录存在!运行结果如下:

2019-06-26 10:50:00.800 DEBUG 95032 --- [           main] com.zcm.mybatis.dao.UserDao.getUserInfo  : ==>  Preparing: select name,phone,info_id from d_user where id = ? 
2019-06-26 10:50:00.854 DEBUG 95032 --- [           main] com.zcm.mybatis.dao.UserDao.getUserInfo  : ==> Parameters: 1(Integer)
2019-06-26 10:50:00.954 DEBUG 95032 --- [           main] c.z.m.d.m.InfoMapper.selectByPrimaryKey  : ====>  Preparing: select id, card_id, birth, weight, height from d_info where id = ? 
2019-06-26 10:50:00.955 DEBUG 95032 --- [           main] c.z.m.d.m.InfoMapper.selectByPrimaryKey  : ====> Parameters: 0(Integer)
2019-06-26 10:50:00.956 DEBUG 95032 --- [           main] c.z.m.d.m.InfoMapper.selectByPrimaryKey  : <====      Total: 0
2019-06-26 10:50:00.957 DEBUG 95032 --- [           main] com.zcm.mybatis.dao.UserDao.getUserInfo  : <==      Total: 1
null

2. 当UserInfoMap中有字段不为NULL的时候,getUserInfo返回的结果才不为null(前提查询的记录存在),如d_user表id=1中,为phone添加值"x",如下图:

这时再运行测试程序,结果如下:

2019-06-26 11:01:20.794 DEBUG 95861 --- [           main] com.zcm.mybatis.dao.UserDao.getUserInfo  : ==>  Preparing: select name,phone,info_id from d_user where id = ? 
2019-06-26 11:01:20.856 DEBUG 95861 --- [           main] com.zcm.mybatis.dao.UserDao.getUserInfo  : ==> Parameters: 1(Integer)
2019-06-26 11:01:20.965 DEBUG 95861 --- [           main] c.z.m.d.m.InfoMapper.selectByPrimaryKey  : ====>  Preparing: select id, card_id, birth, weight, height from d_info where id = ? 
2019-06-26 11:01:20.966 DEBUG 95861 --- [           main] c.z.m.d.m.InfoMapper.selectByPrimaryKey  : ====> Parameters: 0(Integer)
2019-06-26 11:01:20.967 DEBUG 95861 --- [           main] c.z.m.d.m.InfoMapper.selectByPrimaryKey  : <====      Total: 0
2019-06-26 11:01:20.968 DEBUG 95861 --- [           main] com.zcm.mybatis.dao.UserDao.getUserInfo  : <==      Total: 1
{"phone":"x"}

所以综合本测试案例,得出的最终结果是:

1. 记录存在时,不一定返回的对象一定不为null, 还要看查询的字段是否全部为NULL,或者说是否有不为NULL的字段

2. 这个测试结果跟是否有关联查询无关!

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/402491.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微软万圣节文件

为什么80%的码农都做不了架构师&#xff1f;>>> http://www.aka.org.cn/Docs/halloween/halloweenDoc.html 微软万圣节文件 圣节文件在微软以外被用作称呼一系列来源可靠的备忘录&#xff0c;内容是微软总部用来对付开源软件&#xff08;特别是Linux&#xff09;的…

linux C 学习 简单字符串逆序输出

看了下网上的字符串逆序输出&#xff0c;都相对复杂&#xff0c;下面给一个简单的字符串逆序输出小程序实现: [cpp] view plaincopy #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { int i; int n; …

【干货分享】流程DEMO-补打卡

流程名&#xff1a; 补打卡申请 业务描述&#xff1a; 当员工在该出勤的工作日出勤但漏打卡时&#xff0c;于一周内填写补打卡申请。 流程相关文件&#xff1a; 流程包.xml 流程说明&#xff1a; 直接导入流程包文件&#xff0c;即可使用本流程 表单&#xff1a; 流程&#xf…

从头学习linux C 冒泡法排序

下面是一个简单冒泡法排序&#xff0c;代码如下&#xff1a; [cpp] view plaincopy #include <stdio.h> #define LEN 10 int main() { int a,i,j; int ARRAY[10]{23,1,4,9,6,17,24,56,98,72}; printf("Display this array:\n"); …

2019年最流行的10个前端框架

From: http://blog.sina.com.cn/s/blog_18337e9c40102yt1x.html &#xfeff;2019年最流行的10个前端框架 从去年下半年开始&#xff0c;互联网行业慢慢进入寒冬&#xff0c;一些设计师也不得不重新找工作。关于求职这个事情&#xff0c;UI黑客之前写过一篇文章《面试了50多位…

【Linux学习笔记】用nc实现两台主机间的文件传输(不需要输密码)

通常&#xff0c;可以用scp完成两台主机间的文件传输任务&#xff0c;但在主机间未建立信任关系的情况下&#xff0c;scp每次都需要输入密码&#xff0c;用起来感觉不是很方便&#xff0c;之前这篇笔记介绍过不用输入密码执行脚本或传输文件的方法&#xff0c;但对于一些临时性…

Linux C 中断言assert()使用简介

assert()是一个调试程序时经常使用的宏&#xff0c;在程序运行时它计算括号内的表达式&#xff0c;如果表达式为FALSE (0), 程序将报告错误&#xff0c;并终止执行。如果表达式不为0&#xff0c;则继续执行后面的语句&#xff0c;它的作用是终止程序以免导致严重后果&#xff0…

SQL中group by的用法

group by即按照给定字段对结果集进行分组&#xff0c;从字面意义上理解就是根据“by”指定的规则对数据进行分组&#xff0c;所谓的分组就是将一个“数据集”划分成若干个“小区域”&#xff0c;然后针对若干个“小区域”进行数据处理。 group by的写法&#xff1a; 1.select 字…

【Mac】tar 打包指定目录并排除某些目录或文件

如题&#xff0c;bash脚本如下&#xff1a; #!/bin/bashDIR$1 # 要打包的目标目录# 排除的目录列表 if [ "$1" "retail" ]; thenarray(logs lib target .idea .mvn) elif [ "$1" "manager" ]; thenarray(.idea update data/log d…

C#写文本文件如何写入回车换行符?

public void WriteLogFile(String input){//指定日志文件的目录string fname "C:\\Inetpub\\wwwroot\\CommonFunction\\upFile " "\\logfile.txt ";//定义文件信息对象FileInfo finfo new FileInfo(fname);//判断文件是否存在以及是否大于2Kif (finfo.E…

Linux C 数据结构---链表(单向链表)

上一篇我们讲到了线性表&#xff0c;线性表就是数据元素都一一对应&#xff0c;除只有唯一的前驱&#xff0c;唯一的后继。 线性表存储结构分为顺序存储、链式存储。 顺序存储的优点&#xff1a; 顺序存储的缺点&#xff1a; 链表就是典型的链式存储&#xff0c;将线性表L &am…

前端学PHP之文件操作(认真读读)

前面的话 在程序运行时&#xff0c;程序本身和数据一般都存在内存中&#xff0c;当程序运行结束后&#xff0c;存放在内存中的数据被释放。如果需要长期保存程序运行所需的原始数据&#xff0c;或程序运行产生的结果&#xff0c;就需要把数据存储在文件或数据库。一般地&#x…

java 定时任务(三):cron表达式

From: https://www.cnblogs.com/sawyerlsy/p/7208321.html 一、完整的cron表达式由7位以空格分隔的时间元素组成&#xff0c;从左到右分别为&#xff1a;秒、分、时、日期、月份、星期几、年份。其中需要注意的有以下几点&#xff1a; 1. spring 4.x 的spring task中只支持前6种…

1.对程序的看法 2013.8.1

一、一个程序或者是一个项目&#xff0c;其实就是 数据库 与 程序 与 界面的集合。做程序主要就是处理它们三个 之间的关系 处理它们的经典模式就是MVC M model 数据库v view 显示 html css javascriptc con 控制器 编程语言 二、一个项目 就是类库与函数的集合 三、类库 ①构…

做值钱的事比赚钱更有意义

艾伦图灵是英国著名的数学家&#xff0c;二战时期&#xff0c;他在军方邀请下进行德国Enigma密码破译工作。Enigma是当时德国使用的一种加密系统&#xff0c;直到今天还被视为史上最可靠的加密系统之一。它由一个装满了复杂而精致元件的盒子构成&#xff0c;包括26个字母键盘、…

我为什么要立刻放弃 React 而使用 Vue?

From: https://baijiahao.baidu.com/s?id1607323518011007619&wfrspider&forpc CSDN 发布时间&#xff1a;18-07-29 19:28 现在&#xff0c;Vue.js 在 Github 上得到的星星数已经超过了 React。这个框架的流行度在不断增长&#xff0c;由于它并没有像 Facebok&#…

本地同时修改2个版本

为什么80%的码农都做不了架构师&#xff1f;>>> 昨天讨论后我又想了想&#xff0c;你主要的需求是想在本地同时修改2个版本&#xff0c;用分支也可以做到&#xff0c;方法如下 上图是库的目录结构&#xff0c;比如Codes上做了个分支b1&#xff0c;想同时在本地编辑…

Linux C 内存管理

提到C语言&#xff0c;我们知道C语言和其他高级语言的最大的区别就是C语言是要操作内存的&#xff01; 我们需要知道——变量&#xff0c;其实是内存地址的一个抽像名字罢了。在静态编译的程序中&#xff0c;所有的变量名都会在编译时被转成内存地址。机器是不知道我们取的名字…

20145315 《信息安全系统设计基础》第14周学习总结

20145315 《信息安全系统设计基础》第14周学习总结 课程内容总结 物理地址和虚拟地址 物理地址&#xff1a;计算机系统的主存被组织成一个由M个连续的字节大小的单元组成的数组。每个字节都有唯一的物理地址。虚拟寻址&#xff1a;使用虚拟寻址时&#xff0c;CPU通过生成一个虚…