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

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

开始前我们先看一个问题: 你是否曾经在学习 Mybatis 的时候跟我有一样的疑问,什么情况下返回 null,什么时候是空集合,为什么会是这种结果?那么你觉得上述这种回答能说服你嘛?...看完这篇你就知道查询结果为空时候为什么集合会是空集合而不是 NULL,而对象为什么会是 NULL 了。 PS:对过程不感兴趣的可以直接跳到最后看结论。...当返回行的所有列都是空时,MyBatis 默认返回 null。当开启这个设置时,MyBatis会返回一个空实例。 请注意,它也适用于嵌套的结果集(如集合或关联)。...在简单映射流程中,会先通过 shouldApplyAutomaticMappings() 方法检测是否开启了自动映射。...而返回值为集合对象且查为空时,selectList 会把这个存储结果的 List 对象直接返回,此时这个 List 就是个空集合。

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

    Java程序设计(基础)- 数据类型

    boolean equals(Object other) 当指定对象等于此枚举常量时,返回 true。...返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零) String toString() 返回枚举常量的名称,它包含在声明中 staticT extends EnumT>> T static...如果此映射以前包含一个该键的映射关系,则用指定值替换旧值(当且仅当,返回 true 时,才能说映射 m 包含键 k 的映射关系)。...(该映射最多只能包含一个这样的映射关系.) get(Object key):返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。...为什么Java里有基本数据类型和引用数据类型? 引用类型在堆里,基本类型在栈里。 栈空间小且连续,往往会被放在缓存。引用类型cache miss率高且要多一次解引用。

    88320

    Java 集合框架 (1)---- 概述

    ; } traversalByIterator(iterable.iterator()); } 而在调用这个方法时,我们可以传入 List 、Set 、我们在上面实现的自定义的类 ForEachTest...映射到我们正在学习的集合框架来说,这三个特性已经在 Collection 接口中提供了对应的方法,因此 Set 接口中没有提供另外的方法。那么为什么还要多写这么一个接口呢?...0 : e.getValue().hashCode()) * * 设计 hashCode 方法时,确保当两个对象的 equals 方法返回 true 时, *.../** * 在映射中插入新的关系,如果 key 已经在映射中某个 Entry 对象中存在(等价), * 那么相当于更新 key 所对应的 value 对象,对于 null..., * 如果 key 在当前映射中不存在,则返回 null, * 对于 key 为 null 的情况,不同的 Map 实现类有不同的处理方法 */ V remove

    96930

    ABP入门系列(4)——创建应用服务

    以下几点,在创建应用服务时需要注意: 在ABP中,一个应用服务需要实现IApplicationService接口,最好的实践是针对每个应用服务都创建相应继承自IApplicationService的接口...ABP针对UOW模式自动进行数据库的连接及事务管理,且会自动保存数据修改。...这是为什么呢?因为展现层与应用服务层是通过Data Transfer Object(DTO)进行数据传输。 2, 为什么需要通过dto进行数据传输? 总结来说,使用DTO进行数据传输具有以下好处。...>(sourceModel)) 在Abp中有两种方式创建映射规则: 特性数据注解方式: AutoMapFrom、AutoMapTo 特性创建单向映射 AutoMap 特性创建双向映射 代码创建映射规则:...DTO如何与实体进行自动映射? 如何对映射规则统一创建? 源码已上传至Github-LearningMpaAbp,可自行参考。

    1.7K70

    Lambda表达式你会用吗?

    可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。 // 1. 不需要参数,返回值为 5 () -> 5 // 2....方法签名为V putIfAbsent(K key, V value),作用是只有在不存在key值的映射或映射值为null时,才将value指定的值放入到Map中,否则不对Map做更改.该方法将条件判断和赋值合二为一...Object value)方法,只有在当前Map中key正好映射到value时才删除该映射,否则什么也不做. replace() 在Java7及以前,要想替换Map中的映射关系可通过put(K key,...extends V> mappingFunction),作用是:只有在当前Map中不存在key值的映射或映射值为null时,才调用mappingFunction,并在mappingFunction执行结果非...null时,将结果跟key关联.

    90730

    MyBatisPlus

    进行,Java实体 与 数据库之间的相互映射 **注解在类上,指定类和数据库表的映射关系 ** 如果,实体类 类名——>转换 小写后——> 和数据库映射表相同,可以不指定该注解; MP 默认就是这样映射的...实体时候添加的 前缀; table-prefix: tb_ 这样,MP 在通过实体映射 数据库表的时候,会在前面自动添加 tb_,可以大量节省开发者的工作…(只限于,存在规律的表; 验证思路...,才会自动填充,使用雪花算法 ASSIGN_UUID 手动+uuid 当实体类的主键属性为空时,才会自动填充,使用UUID 注意: uuid 是一个带有字母的字符串,数据库的字段需要是 varchar...,MP 在程序运行时候,会自动给 Mapper接口,完成对应的实现~ MP 为了方便操作后面又提供了 Service CRUD接口 还有 Wrapper条件构造器 方便组装SQL where条件 BaseMapper...的自定义方法时使用MP的条件构造器帮助我们进行条件构造 MP 中使用 Mybatis 方式: 其实本质上是没有太大变化的,还是正常的:定义Mapper接口 创建对应的映射文件 映射文件中编写sql

    21710

    SpringBoot 快速整合 Mybatis(去XML化+注解进阶)

    ") List list(); } 使用过Hibernate的同学可能会好奇,这里为什么没有配置映射关系也能完成属性注入?...在传统项目中使用过Mybatis的童鞋可能很快就反应过来,是因为在配置文件中开启了全局驼峰映射,SpringBoot中同样能够做到,并且更为简单快捷。...虽然开启了全局驼峰映射,但你可能还会质疑,如果不符合下划线转驼峰规则的字段,拿查询回来的实体对象属性将获取为null,比如上述User对象属性mobileNum和对应的数据库字段phoneNum,则查询结果为...例如上面的list方法,我们可以在查询SQL的基础上,指定返回的结果集的映射关系,其中property表示实体对象的属性名,column表示对应的数据库字段名。...作用:将数据库字段根据驼峰规则自动注入到对象属性。

    32611

    Java Lambda 解析和使用技巧

    现在,你用 lambda 也可以在 java 的里面传参时把函数用 lambda 形式“打包”传给别的函数,并且符合强类型的面向对象要求。...| 输入 (T,T) 返回 T IntSupplier 等基础数值非泛型接口 我们在使用的时候,只用关心接口下面的唯一抽象方法的输入值和返回值即可,不用太关心名字 lambda 的语法糖 如果函数体只有一行...extends V> mappingFunction) 只有在当前Map中不存在key值的映射或映射值为null时,才调用mappingFunction,并在mappingFunction执行结果非null...extends V> remappingFunction) 只有在当前Map中存在key值的映射且非null时,才调用remappingFunction,如果remappingFunction执行结果为...null,则删除key的映射,否则使用该结果替换key原来的映射.

    1K10

    SpringBoot快速整合Mybatis(去XML化+注解进阶)

    ") List list(); } 使用过Hibernate的同学可能会好奇,这里为什么没有配置映射关系也能完成属性注入?...在传统项目中使用过Mybatis的童鞋可能很快就反应过来,是因为在配置文件中开启了全局驼峰映射,SpringBoot中同样能够做到,并且更为简单快捷。...虽然开启了全局驼峰映射,但你可能还会质疑,如果不符合下划线转驼峰规则的字段,拿查询回来的实体对象属性将获取为null,比如上述User对象属性mobileNum和对应的数据库字段phoneNum,则查询结果为...例如上面的list方法,我们可以在查询SQL的基础上,指定返回的结果集的映射关系,其中property表示实体对象的属性名,column表示对应的数据库字段名。...作用:将数据库字段根据驼峰规则自动注入到对象属性。

    1.9K30

    Spring Boot 快速整合 MyBatis

    ") List list(); } 使用过Hibernate的同学可能会好奇,这里为什么没有配置映射关系也能完成属性注入?...在传统项目中使用过Mybatis的童鞋可能很快就反应过来,是因为在配置文件中开启了全局驼峰映射,SpringBoot中同样能够做到,并且更为简单快捷。...虽然开启了全局驼峰映射,但你可能还会质疑,如果不符合下划线转驼峰规则的字段,拿查询回来的实体对象属性将获取为null,比如上述User对象属性mobileNum和对应的数据库字段phoneNum,则查询结果为...例如上面的list方法,我们可以在查询SQL的基础上,指定返回的结果集的映射关系,其中property表示实体对象的属性名,column表示对应的数据库字段名。...作用:将数据库字段根据驼峰规则自动注入到对象属性。

    50721

    MyBatis 源码分析 - SQL 的执行过程

    到此,实体类对象已经创建好了,接下里要做的事情是将结果集中的数据映射到实体类对象中。 2.2.6.2 结果集映射 在 MyBatis 中,结果集自动映射有三种等级。...if (isNested) { // 对于嵌套 resultMap,仅当全局的映射行为为 FULL 时,才进行自动映射 return AutoMappingBehavior.FULL...弄懂了未映射列名获取的过程,自动映射的代码逻辑就不难懂了。好了,关于自动映射的分析就先到这,接下来分析一下 MyBatis 是如何将结果集中的数据填充到已映射的实体类字段中的。...从上面结果中可以看出,我们在未调用 getAuthor 方法时,Article 对象中的 author 字段为 null。...在日常开发中,我们为客户端提供接口时,也应该这样做。

    3.9K20

    java中的数据类型有哪些?

    在很多实现中,它们将执行高开销的线性搜索。 List 接口提供了两种在列表的任意位置高效插入和移除多个元素的方法。 add() : 在列表的插入指定元素。...如果此映射以前包含一个该键的映射关系,则用指定值替换旧值(当且仅当,返回 true 时,才能说映射 m 包含键 n的映射关系)。...k==null :key.equals(k))的键 k 到值 v 的映射关系,则移除该映射关系。...(该映射最多只能包含一个这样的映射关系.) get(Object key):返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。...为什么Java里有基本数据类型和引用数据类型? 1、引用类型在堆里,基本类型在栈里。(引用类型在堆里存储的是数据的地址) 2、栈空间小且连续,往往会被放在缓存。

    1.2K20

    Mybatis学习笔记--

    可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录 4) MyBatis 是一个 半自动的...JPA 操作简便,开发效率高 程序中的长难复杂 SQL 需要绕过框架 内部自动生产的 SQL,不容易做特殊优化 基于全映射的全自动框架,大量字段的 POJO 进行部分映射时比较困难 反射操作太多...:自动映射,用于属性名和表中字段名一致的情况 resultMap:自定义映射,用于一对多或多对一或字段名和属性名不一致的情况 2、当查询的数据为多条时,不能使用实体类作为返回值,只能使用集合...map集合的方式查询,一条数据对应一个map;若有多条数据,就会产生多个map集合,此 时可以将这些map放在一个list集合中获取 */ List> getAllUserToMap...a>可以通过为字段起别名的方式,保证和实体类中的属性名保持一致 b>可以在MyBatis的核心配置文件中设置一个全局配置信息mapUnderscoreToCamelCase,可 以在查询表中数据时

    68030

    深入Mybatis源码——执行流程

    不过本质上第二种是在第一种的基础之上实现的,所以下面就以第二种为主进行分析,进入到getMapper方法: public T> T getMapper(ClassT> type) { return...Cause: " + e, e); } } mapperRegistry对象在上一篇分析过,是在解析xml中的mapper节点时注册进去的,而这个对象中缓存了Mapper接口和对应的代理工厂的映射...ResultSetHandler:在StatementHandler构造函数中创建,对数据库返回的结果集(ResultSet)进行封装,返回用户指定的实体类型。...//4.3一般情况下 autoMappingBehavior默认值为PARTIAL,对未明确指定映射规则的字段进行自动映射 foundValues = applyAutomaticMappings...rowValue : null; } return rowValue; } 自动映射 private boolean applyAutomaticMappings(ResultSetWrapper

    59920

    java集合框架容器 java框架层级 继承图结构 集合框架的抽象类 集合框架主要实现类

    Map接口的骨架实现 要实现一个不可修改的映射,程序员只需要扩展这个类并为entrySet方法提供一个实现,该方法返回Map映射的set-view。...(如果s.contains(e)在调用之前立即返回true,则调用s.add(e)时,将元素e重新插入到集合s中。)...在 WeakHashMap 中,当某个键不再正常使用时,将自动移除其条目。 更精确地说,对于一个给定的键,其映射的存在并不阻止垃圾回收器对该键的丢弃,这就使该键成为可终止的,被终止,然后被回收。...丢弃某个键时,其条目从映射中有效地移除,因此,该类的行为与其他的 Map 实现有所不同。 null 值和 null 键都被支持。...枚举映射中所有键都必须来自单个枚举类型,该枚举类型在创建映射时显式或隐式地指定。 枚举映射在内部表示为数组。此表示形式非常紧凑且高效。 (6)IdentityHashMap ?

    1.1K20

    MyBatis:基本应用

    框架可以理解为半成品软件,框架做好以后,接下来在它基础上进行开发。 为什么使用框架?...程序在启动时消耗的资源多少决定了它是轻量级还是重量级。 原始 JDBC 操作的分析 数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能。...使用反射、内省等底层技术,自动将实体与表进行属性与字段的自动映射。...,即我们在程序中根据数据库表结构建立的一个个实体 Java Bean R(关系型数据库的数据结构):数据库表,关系型数据库的结构模型 M(映射):从 R(数据库)到 O(对象模型)的映射,可通过 XML...执行语句的方法主要有: T> T selectOne(String statement, Object parameter) List selectList(String statement

    1.3K30

    MyBatis中SqlSessionFactory和SqlSession简解

    通常来说,当你选择其中一个方法时,你需要考虑以下几点: 事务处理:你希望在 session 作用域中使用事务作用域,还是使用自动提交(auto-commit)?...T> T selectOne(String statement) List selectList(String statement) T> CursorT> selectCursor...对返回的对象(例如 list)做出的任何修改将会影响本地缓存的内容,进而将会影响到在本次 session 中从缓存返回的值。因此,不要对 MyBatis 所返回的对象作出更改,以防后患。...而是由方法名匹配映射语句的 ID。 此外,返回类型必须匹配期望的结果类型,返回单个值时,返回类型应该是返回值的类,返回多个值时,则为数组或集合类,另外也可以是游标(Cursor)。...在使用 XML 来绑定映射器接口时,保证语句处于合适的命名空间中即可。唯一的限制是,不能在两个具有继承关系的接口中拥有相同的方法签名(这是潜在的危险做法,不可取)。

    2.5K20

    Spring MVC中HandlerMapping和HandlerAdapter是怎么工作的?

    ; } } 访问http://localhost:8080/index,页面输出IndexController,这里需要说明的有2点 当Handler放回的ModelAndView为null时,...; 当通过请求找Handler时,会依次调用handlerMappings的handler方法,找到第一个不为null的handler则返回,继续后面的流程,如果遍历完handlerMappings,handler...选出最优的,返回对应的Handler 如果还是没有找到,则返回null 这个查找的逻辑我举个例子 @Test public void test1() { AntPathMatcher pathMatcher...LinkedHashMap(); // 不包含通配符的url -> List // 这里为什么是一个List呢?...; } } 强转为HttpRequestHandler然后调用handleRequest方法,最后返回null,当ModelAndView为null的时候,ViewResolver查找View

    1.2K10
    领券