首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Mybatis查询结果为空时,为什么返回值为NULL或空集合?

目录 背景 JDBC 中的 ResultSet 简介 简单映射 回归最初的问题:查询结果为空时的返回值 结论 背景 一行数据记录如何映射成一个 Java 对象,这种映射机制是 MyBatis 作为 ORM...开始前我们先看一个问题: 你是否曾经在学习 Mybatis 的时候跟我有一样的疑问,什么情况下返回 null,什么时候是空集合,为什么会是这种结果?那么你觉得上述这种回答能说服你嘛?...看完这篇你就知道查询结果为空时候为什么集合会是空集合而不是 NULL,而对象为什么会是 NULL 了。 PS:对过程不感兴趣的可以直接跳到最后看结论。...当返回行的所有列都是空时,MyBatis 默认返回 null。当开启这个设置时,MyBatis会返回一个空实例。 请注意,它也适用于嵌套的结果集(如集合或关联)。...回归最初的问题:查询结果为空时的返回值 | 返回结果为单行数据 可以从 ResultSetHandler的handleResultSets 方法开始分析。

5.4K20

Hibernate之一级缓存

为什么使用一级缓存 1.3. 如何使用一级缓存 1.4. 一级缓存的规则 1.5. 一级缓存管理 1.6....总结 Hibernate之一级缓存 什么是一级缓存 Hibernate创建每个Session对象时,都会给Session分配一块独立的缓存区,用于存放Session查询出来的对象,这个分配给Session...的缓存区称之为一级缓存,也叫Session级缓存 为什么使用一级缓存 Session读取数据时,会优先向缓存区取数据,如果存在数据直接返回,不存在才会区数据库查询,从而降低了数据库的访问次数。...提升了代码的运行效率 如何使用一级缓存 一级缓存默认是开启的,在使用Hibernate的API进行查询时会自动使用 验证 从控制台可以看到只发出一条sql的查询语句 @Test public...sql语句,因为在session2的缓存区没有这个对象 Student s2=session2.get(Student.class, 2); transaction.commit();

52920
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    双重检查锁,原来是这样演变来的,你了解吗

    ConcurrentHashSet,在多线程时,有可能会创建多个,因此要使用锁。...我们知道使用锁会导致额外的性能开销,对于上面的单例模式,只有第一次创建时需要锁(防止创建多个实例),但查询时是不需要锁的。 如果针对方法进行加锁,每次查询也要承担加锁的性能损耗。...,如果不为null,说明已经实例化了,直接返回,没必要进行创建; 第三,如果为null,进行加锁,然后再次判断是否为null。...为什么要再次判断?因为一个线程判断为null之后,另外一个线程可能已经创建了对象,所以在锁定之后,需要再次核实一下,真的为null,则进行对象创建。...此时,线程B进来了,在第一层判断时发现Instance已经有值了(实际上还未初始化),直接返回对应的值。那么,程序在使用这个未初始化的值时,便会出现错误。

    53620

    干货——聊聊内存那些事(基于单片机系统)

    可见堆空间分配内存失败则会返回NULL,并且地址指向0x00,释放时只是通过free(),仅是把指向的内容变成了空值,但地址还是存在的,所以标准的做法是赋上“NULL”值。...如果大小为 0,且 ptr 指向一个已存在的内存块,则 ptr 所指向的内存块会被释放,并返回一个空指针。 返回值 该函数返回一个指针 ,指向重新分配大小的内存。如果请求失败,则返回 NULL。...栈区由编译器自动分配和是释放,存放函数中定义的参数值、返回值和局部变量,在程序运行过程实时分配和释放,栈区由操作系统自动管理,无须手动管理。栈区是先进后出原则。...碎片化测试时,p[2]、p[3]、p[4]的大小应该是3*50=150,结果最大可以是160左右。 查看解释: 如果用malloc(n)来分配堆内存,那么分配的内存比n大,为什么呢?...为什么Rom中还要有RW,因为掉电后RAM中所有的数据都丢失了,每次上电RAM中的数据是被程序赋值的,每次这些固定的值就是存储在ROM中的,为什么不包含ZI段呢,是因为ZI数据都是0,没必要包含,只要查询运行之前将

    89510

    MySQL性能优化(六):常见优化SQL的技巧

    复杂SQL的分解,在面对超级复杂SQL语句时,性能提升尤为明显。所以,在面对超级复杂SQL语句,并且存在性能问题时,推荐分解为小查询来进行优化。...一个SQL可以搞定事情,为何要分开来写,而且还得在应用程序中多次执行SQL查询,再进行结果集的关联,这到底为什么要这么做呢?...在Join表的时候使用对应类型的列,并将其索引。 尽可能的使用NOT NULL。 越小的列会越快。 当只要一行数据时使用LIMIT 1。...(在选择时,需要进行权衡) 关于查询缓存有如下参数可供配置: query_cache_type 是否打开查询缓存。...这个值必须是1024的整倍数,否则实际分配的数据会和指定的大小有区别。 query_cache_min_res_unit 在查询缓存中分配内存块时的最小单位。

    1.6K50

    【Kotlin Android】一个列表带你领略Kotlin简洁之风

    作为一个曾经使用C、C++作为主要开发语言的人,在刚开始接触到Java从事Android开发时,对于Java的简便易学、自动内存垃圾回收机制等等,简直就像发现了一个新大陆一样无比惊喜,大大提升了开发效率...完整的方法声明如下(其中[]方括号中的属性不需要时可以省略): [open] [函数属性] [override] fun 函数名(参数: 参数类型)[: 返回值类型] { } 如: open protected...getItemCount() = 10 即Kotlin的表达式作为函数体,甚至可以省略返回类型,Kotlin自动推断返回类型 3....在Java中经常出现让人头痛的问题就是,如果不加null判断,常常会出现空指针异常,而在Kotlin中,必须对可能为空的变量进行显式的声明,即 i)在变量后面加上“?”...来表示该变量可能为空,如果变量真的为null时,会跳过不执行。 ii)如果想和Java一样,在变量为null时,抛出空指针异常,那么可以在变量后加上“!!”

    1.9K10

    Java_后端面试题

    2、HashMap 是线程安全的吗,为什么不是线程安全的? 不是线程安全的。...; sf.get();//有时候会返回null 软引用主要用户实现类似缓存的功能,在内存足够的情况下直接通过软引用取值,无需从繁忙的真实来源查询数据,提升速度;当内存不足时,自动删除这部分缓存数据,从真正的来源查询这些数据...弱引用 第二次垃圾回收时回收 弱引用是在第二次垃圾回收时回收,短时间内通过弱引用取对应的数据,可以取到,当执行过第二次垃圾回收时,将返回null。...虚引用 垃圾回收时回收,无法通过引用取到对象值 虚引用是每次垃圾回收的时候都会被回收,通过虚引用的get方法永远获取到的数据为null,因此也被成为幽灵引用。...null ,当然不同类型的初始化值也是不一样的,假设是基本类型int类型, 那么为系统分配的初始化值也是对应的默认值0。

    39720

    2.Mysql 查询优化器

    (返回常量表) 定义了唯一键的表:unique_not_null_column INT NOT NULL UNIQUE FROM Table1 ......在评估这个SQL时,根据常量表的定义2,发现table1是一个常量表。                   ...做等值比较,一般返回一行数据 4.ref        : 具有相等关系的索引,索引值不能为NULL,(返回 少量数据行) 5.ref_or_null : 具有相等关系的索引,但索引值可能为空 6.range...---- 查询计划 QEP      每个计划(或计划的一部分)都分配了成本cost。计划的成本大致反映了根据计划计算查询所需的资源,其中主要因素是计算查询时将要访问的行数。...如果有方法可以将成本分配给不同的QEP,那么就可以对它们进行比较。因此,优化器的目标是在所有可能的计划中找到一个成本最小的QEP。      在MySQL中,最优QEP的搜索是以自底而上的方式进行的。

    1K20

    RDMA verbs编程基础知识,程序执行流程,函数,名词说明

    返回值:成功时返回一个指向RDMA设备上下文的指针,失败时返回NULL。使用场景:在获取到可用的RDMA设备列表后,应用程序需要选择一个设备并打开它,以便进行后续的RDMA操作。...4. ibv_alloc_pd()功能:为RDMA设备分配一个保护域(PD)。参数:RDMA设备上下文指针。返回值:成功时返回一个指向新分配的PD的指针,失败时返回NULL。...返回值:成功时返回一个指向新创建的CQ的指针,失败时返回NULL。使用场景:在RDMA通信中,CQ用于存储已完成的工作请求,以便应用程序可以轮询并处理这些请求。...返回值:成功时返回一个指向新创建的QP的指针,失败时返回NULL。使用场景:QP是RDMA通信的核心对象,用于数据的发送和接收。因此,在RDMA通信之前,应用程序需要创建一个QP。...返回值: 成功时,返回一个指向已注册内存区域的句柄(包含lkey和rkey);失败时,返回NULL。

    34910

    1 SQL查询优化1. 获取有性能问题SQL的方法2.慢查询日志介绍3. 实时获取3.SQL的解析预处理及生成执行计划4 对特定SQL的查询优化

    尽量避免在 where 子语句中有 where num is null,这样不用索引,要全表扫描,可用 0 代替 null 避免在 where 中用or!...实例 3.SQL的解析预处理及生成执行计划 3.1 查询速度为什么会慢 ? MySQL服务器处理查询请求的整个过程 3.2 查询缓存对SQL性能的影响 ?...Hash查找只能进行全值匹配 命中缓存,在返回结果前,MySQL会检查用户权限,查询无需被解析,看出缓存直接返回结果其实很不容易 如果缓存中结果正确的,每次缓存牵涉到表被更新,都要对缓存也进行刷新,如此即使是同一个...设置数据表被锁后是否返回缓存中的数据(默认关闭) query_cache_min_res_unit 设置查询缓存分配的内存块最小单位 当 3.3 执行计划 ?...将一个表达式转化为常数表达式 等价变换规则 子查询优化 可能转为关联查询,减少表的查询次数 提前终止查询 发现已经满足查询条件时立即终止,特例如limit子句 发现不成立条件,立即返回null

    2.4K91

    详解SQL集合运算

    为什么使用集合运算: 1.在集合运算中比联接查询和EXISTS/NOT EXISTS更方便。 在阅读下面的章节时,我们可以先把环境准备好,以下的SQL脚本可以帮助大家创建数据库,创建表,插入数据。...如果输入的查询1的第一列为char类型,输入的查询2的第一列为datetime类型,则会提示转换失败:从字符串转换日期和/或时间时,转换失败; (6)集合运算结果中列名由输入的查询1决定,如果要为结果分配结果列...,应该在输入的查询1中分配相应的别名; (7)集合运算时,对行进行进行比较时,集合运算认为两个NULL相等; (8)UNION支持DISTINCT和ALL。...NULL ) ) 2.写一个查询,返回在2008年1月和在2008年2月都有订单活动的客户和雇员。...NULL ) ) 3.写一个查询,返回在2008年1月和在2008年2月都有订单活动,而在2007年没有订单活动的客户和雇员 期望结果:

    2.3K80

    MySQL的varchar水真的太深了——InnoDB记录存储结构

    所以当你用postman测试一个HTTP分页查询接口(每页10条数据)时,发现第一次打印耗时300 ~ 400ms,往后不停的查找下一页10条数据时都是30 ~ 40ms,原因就是第一次请求接口时,读数据库的时候需要读磁盘...这就解释了为什么第一次查询可能会比后续的查询慢。...如果实际存储字节L > 127,varchar占用的真实字节数L需要分配2个字节才能表示。 为什么分界线是127? 在变长字段长度的编码中,选择127作为阈值,是基于兼顾存储效率和容量需求的考虑。...二进制位的值为1时,代表该列的值为NULL,为0时,代表该列的值不为NULL。...返回结果:读取到的数据被处理(如应用任何查询中的过滤条件或函数)并返回给客户端。 写入过程 内联存储尝试:当向表中插入包含大字段的记录时,InnoDB首先尝试将数据(无论大小)存储在行内。

    1.9K40

    Mysql如何做表分区

    我们都知道,在Mysql 中,如果数据量过大的话,就有可能在查询过程中会出现各种超时的情况,毕竟如果一个表的数据量过大的时候,一个简单的单表查询都会有点慢,所以,就有了各种中间件的存在,比如说 MyCat...每个分区在逻辑上都是表的一部分,但在物理存储上,每个分区可以有自己的存储引擎、文件、索引等。 为什么要使用分区?...用途:当数据可以按照某个离散值列表进行分组时,如地域、类别等。 特点:分区键可以是整数或枚举类型。定义时指定一个值列表,如 PARTITION p1 VALUES IN (1, 3, 5)。...用途:当数据分布需要均匀或随机时,HASH分区可以确保数据在预先确定数目的分区中平均分布。 特点: 分区键可以是任何MySQL中的有效表达式,只要它返回非负整数值。...分区表可能有一些限制和注意事项,例如,某些类型的索引可能不支持,或者某些查询优化可能不适用于分区表。因此,在决定使用分区之前,最好先详细了解这些限制和注意事项。 所以,你对Mysql 的分区了解了么?

    15610

    Redis的双向链表一文全知道

    redis源码分析系列文章 [Redis源码系列]在Liunx安装和常见API 为什么要从Redis源码分析 String底层实现——动态字符串SDS 前言 hello,又见面了。...lpush左侧插入数据 使用lpush命令往list的左侧中插入a,b,c三个字符,这边注意顺序,查询出来的是c,b,a。下面会说为什么,先挖个坑。 ​...,使用zmalloc方法来分配空间,如果分配不了,则返回NULL,如果可以分配,则继续。...判断是否有内存分配,如果有,则继续,如果没有,则返回NULL,退出方法。...接着根据after的值确定是在节点old_node的前面新增数据,还是在节点old_node的后面新增数据,具体的是指针的调整。最后len加1,返回list。

    2.2K30

    用了这么多年分页PageHelper,才发现自己一直用错了!

    为什么要重新声明一个list函数? “ 答: 往往在很多实际业务应用场景中, 分页查询是基于大数据量的表格展示需求来进行的....“ 答: orderBy和pageNum/pageSize一样,都是Pagehelper通过MyBatis拦截器,在query查询中注入进去的,所以在前端传参时,orderBy参数应为数据库column...,也可以分配给后端接参时....“ 答: 通过阅读PageHelper源码,我们得知在Page查询参数为null时,它并不会赋予它们默认值,并不进行额外的处理,以至于导致分页失败,而给默认值,也是为了谨防前后端调试接口过程中可能会出现的各种意外...,随后便返回PageInfo实体 前面我们有提到,PageHelper基于MyBatis拦截器达到分页的目的,那么为什么此处的ISelect.doSelect()执行,就可以返回PageInfo实体呢?

    9.6K43

    ArrayList 源码解析,炒鸡详细!!!

    了解数组 数组简单来说就是将所有的数据排成一排存放在系统分配的一个内存块上,通过使用特定元素的索引作为数组的下标,可以在常数时间内访问数组元素的这么一个结构; 2数组优缺点 优点 简单方便已使用 访问元素快...缺点 大小固定:数组的大小是静态的,在使用前必须确定好数组的大小 分配一个连续空间块:数组初始分配空间时,有时候无法分配能存储整个数组的内存空间(当数组规模太大时); 基于位置的插入操作实现复杂:如果要在数组中的给定位置插入元素...作用在使用Iterator时,防止在迭代过程中集合被修改。...; size = 0; } 这里我们会发现一个问题啊,我们在静态的数组中进行index所在数据的删除时,一般是直接对 arr[index] = 0; 直接对索引位置的元素进行null赋值。...查询操作 // 指定index 返回其所在的元素 public E get(int index) { // 边界检查 rangeCheck(index); // 返回,这个简单,

    20910

    有意思,原来SQL中的NULL是这么回事儿

    在日常使用数据库时,你在意过NULL值么?...其实,NULL值在数据库中是一个很特殊且有趣的存在,下面我们一起来看看吧; 在查询数据库时,如果你想知道一个列(例如:用户注册年限 USER_AGE)是否为 NULL,SQL 查询语句该怎么写呢?...在进行数据库数据比较操作时,我们不会使用“IS”关键词,不是吗?...为什么要以这种方式来处理 NULL? 因为,在 SQL 中,NULL 表示“未知”。也就是说,NULL 值表示的是“未知”的值。...Oracle 比较特殊,两个值都使用 NULL 来表示,而其他大多数数据库会区分对待。 但只要记住 NULL 表示的是一个未知的值,那么在写 SQL 查询语句时就会得心应手。

    1.3K30

    8.3 Windows驱动开发:内核遍历文件或目录

    文件信息类:表示要返回的文件信息的类型,如文件名、文件大小、文件时间戳等。 文件信息缓冲区:表示存放返回文件信息的缓冲区,其大小必须足够大以容纳查询结果。 缓冲区大小:表示文件信息缓冲区的大小。...文件名匹配模式:指定查询的文件名模式,支持通配符。 是否返回长文件名:指定是否返回长文件名。 函数执行成功时,将返回STATUS_SUCCESS,同时将文件信息写入文件信息缓冲区中。...当返回STATUS_NO_MORE_FILES时,表示目录中没有更多的文件需要枚举。...,其次FileInformationClass参数也是有多种选择的,本例中我们需要遍历文件或目录则设置成FileBothDirectoryInformation就可以,在循环遍历文件时需要将当前目录.以及上一级目录...,这里为大家解释一下,通常情况下ARK工具并不会在内核层实现目录与文件的递归操作,而是将递归过程搬到了应用层,当用户点击一个新目录时,在应用层只需要拼接新的路径再次发送给驱动程序让其重新遍历一份即可,这样不仅可以提高效率而且还降低了蓝屏的风险

    51510

    在 SQL 中该如何处理NULL值,你真的清楚么?

    以下是正文: 在日常使用数据库时,你在意过NULL值么?...其实,NULL值在数据库中是一个很特殊且有趣的存在,下面我们一起来看看吧; 在查询数据库时,如果你想知道一个列(例如:用户注册年限 USER_AGE)是否为 NULL,SQL 查询语句该怎么写呢?...在进行数据库数据比较操作时,我们不会使用“IS”关键词,不是吗?...为什么要以这种方式来处理 NULL? 因为,在 SQL 中,NULL 表示“未知”。也就是说,NULL 值表示的是“未知”的值。...Oracle 比较特殊,两个值都使用 NULL 来表示,而其他大多数数据库会区分对待。 但只要记住 NULL 表示的是一个未知的值,那么在写 SQL 查询语句时就会得心应手。

    27510
    领券