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

Mybatis返回集合类型到底是空集合还是null??源码解读

multipleResults 对象中就包含了我们最终返回的集合对象 三....type) 方法中,对传入的类对象做具体转换 image.png 可以看到 List.class 被转换为 ArrayList.class,接着调用 instantiateClass() 方法,完成空集合的创建...,(划重点)由此可见,Mybatis 返回集合类型默认是空集合 • handlerResult(ResultContext<?...先创建 DefaultResultHandler 对象,初始化 list 成员属性为空集合 2....总结 由上经过源码分析,我们知道 Mybatis 返回集合类型默认是空集合,我们在日常开发中,对于 Mybatis 返回集合类型不需要判断是否为 null,直接调用 list.size() > 0 或者其他第三方工具包提供的集合判空方法即可

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

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

开始前我们先看一个问题: 你是否曾经在学习 Mybatis 的时候跟我有一样的疑问,什么情况下返回 null,什么时候是空集合,为什么会是这种结果?那么你觉得上述这种回答能说服你嘛?...看完这篇你就知道查询结果为空时候为什么集合会是空集合而不是 NULL,而对象为什么会是 NULL 了。 PS:对过程不感兴趣的可以直接跳到最后看结论。...那么我们看到 DefaultSqlSession#selectList() 方法,先说结论:返回值为空集合而不是 NULL。...只不过 selectList 是直接把 executor.query 从 defaultResultHandler.getResultList() 返回空集合没有做处理,直接返回。...而返回值为集合对象且查为空时,selectList 会把这个存储结果的 List 对象直接返回,此时这个 List 就是个空集合

5K20

第三章--第五节:集合

{} 形式 {} 形式用来创建一个 非空集合,语法如下: set={v1,v2,v3,......定义一个包含字符串的集合 name={'张三','李四','王五','赵六','田七'} # 例子二、定义一个包含多种类型的集合 person={'张三',24,63.5} set() 形式 set() 用来创建空集合或者包含数据的集合...,语法如下: set=set(value) 下面我们通过例子来看一下: # 例子一、定义一个空集合 name=set() # 例子二、定义一个非空的集合 abc=set('abcdefghijklmnopqrstuvwxyz...') 注意1:在定义空集合时,不能使用 {} 来创建,因为 {} 是用来创建空字典的,如果要创建空集合必须使用 set() 注意2:{} 方式创建集合的方式与创建字典类似,它们的区别是字典的元素是...() 删除集合中的元素,该元素在指定的集合中不存在 isdisjoint() 判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False issubset() 判断指定集合是否为该方法参数集合的子集

35120

细微之处见真章之是否要给某些类型的属性赋默认值?

默认空集合是不是上游就可以不用 CollectionUtils 判空,代码更简洁?”...二、结论 2.1 要结合具体情况看 比如有些对象没有值时,给一个没有任何属性空对象,很容易导致一些副作用 如果是集合,没有值给空集合通常如果没有副作用,尤其是在当前类中使用,可以给默认集合。...我们无法确定所有返回集合的底层接口都会给空集合,一个一个去核实真的很累 通常哪怕返回空集合我们也需要使用 CollectionUtils 判空然后返回,避免走一些不必要的逻辑, if 为空直接返回,减少圈复杂度...建议写代码时多用卫语句 减少圈复杂度 (判断嵌套) 【正例】 // 为空返回 if(CollectionUtils.isEmpty(set)){ return; } // 不为空的逻辑 【反例

49320

【Python】创建集合方法和集合数据的特点分别是什么?

一、创建集合: 创建集合使用{} 或set()函数,但是如果要创建空集合只能使用set()函数,因为{}用来创建空字典。...带有重复数据会自动去重 s2 = {10, 20, 30, 20, 40, 30, 20, 50} print(s2) # 利用set()创建 s3 = set('abcdef') print(s3) 返回结果...: 图片1.png 2.2 创建空集合:只能用set() 代码体验: # 利用set()创建 s4 = set() print(s4) print(type(s4)) # ...s5 = {} print(s5) print(type(s5))  # 返回结果: 图片2.png 总结: 所以在创建空字典的时候只能用set()函数,利用{}创建的是空字典...2、打印数据和书写数据顺序不一样,也就是说数据没有顺序,也就不支持下标操作 大家要特别注意创建空集合的方法用set()函数就行了,其他也没其他要种种去记忆的地方,这些Python基础知识点属于看一遍就懂的

52430

一文读懂《Effective Java》第43条:返回零长度的数组或集合,而不是null

返回值这种级别上担心性能问题是不明智的,除非分析表明这个方法是造成性能问题的真正源头 对于不返回任何元素的调用,每次返回同一个零长度数组是有可能的,因为零长度数组不可变的,而不可变对象可能被自由的共享...return cheeseList.toArray(EMPTY_CHEESE_ARRAY); } 返回空集合,可以使用Collections.emptySet(),Collections.emptyMap...Collections.emptyList(): public List getCheeseList() { if (cheeseList.isEmpty()){ // 返回一个不可变的空集合...,没理由返回null,二是返回一个零长度的数组或者集合。...Java 的返回值为null 的做法,很可能是从C 语言沿袭过来的,在C 中,数组长度是与实际的数组分开返回的,如果返回的数组长度为0,再分配一个数组就没有任何好处了。

1.6K20

day09-集合

必须是不可变的数据元素 2、创建集合 使用{ }创建 set = {1, 2, 3, 4, 5} print(set) # 输出结果 {1, 2, 3, 4, 5} 直接使用花括号创建的字典,那突然有个问题,创建空集合使用...如果没有提供参数,则返回一个空集合。...可迭代对象有字符串,列表,元祖,字典,集合 1、创建空集合 my_set = set() print(my_set, type(my_set)) # 输出结果 set() ...) # 输出:1 clear() 也可以清空集合 改 集合中的元素是不可变的,所以不能进行修改 查 同样,集合无序的,所以也无法查询 不过我们可以通过in方法键字可以判断一个元素是否存在于集合中,如果有返回...从源集合中找出目标集合中没有的元素集合 a= {1, 2, 3, 4} b = {2, 3, 5} print(a.difference(b)) # 输出结果{1, 4} day09练习 初级 1.创建一个空集合

10410

python中的集合 (set) 的创建和使用

集合中只能存储不可变对象 集合中存储的对象是无序(不是按照元素的插入顺序保存) 集合中不能也不会出现重复的元素 创建集合: 可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用...a = {[1,2,3],[4,6,7]} print(a) # 报错 TypeError: unhashable type: 'list' 方法二:使用 set() 函数来创建集合 创建一个空集合...300:'cc',400:'dd'}) # 传递一个字典作为参数 print(s1)  # {400, 1, 2, 3, 100, 200, 300} pop() 随机删除该集合中的一个元素,并返回..., 2, 3, 100, 40, 'o', 'a', 'h',} s.remove(100) print(s) # {2, 3, 4, 'h', 40, 'o', 'a'} clear() 清空集合...s = {4, 2, 3, 100, 40, 'o', 'a', 'h',} s.clear() print(s) # set() 空集合

21420

Python Set集合

可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。...for 变量1,变量2 in 集合: 使用变量1和变量2 集合的序列函数: len() 计算集合的长度 max() 获取集合中的最大值 min() 获取集合中的最小值 set() 创建空集合或者将其他数据转换为集合...集合中的方法: add -- 增加集合元素 name = {'d', 's'} name.add('d') name 返回结果:{'d', 's'} name.add('sd') name 返回结果:...clear--清空集合元素 name = {'d', 's'} name.clear() name 返回结果:{} copy--浅拷贝 name = {'sd', 'd', 's'} li = name.copy..., 'd', 's'} name.issuperset(li) #判断name是不是li的父集 返回结果:True li.issuperset(name) #判断li是不是name的父集 返回结果:

43320
领券