5.11 mybatis之returnInstanceForEmptyRow作用

devtools/2024/11/14 13:28:47/

文章目录


mybatis的settings配置中有个属性returnInstanceForEmptyRow,该属性新增于mybatis的3.4.2版本,低于此版本不可用。该属性的作用官方解释为:当返回行的所有列都是空时,MyBatis默认返回 null。 当开启这个设置时,MyBatis会返回一个空实例。 请注意,它也适用于嵌套的结果集(如集合或关联)。该属性默认配置为false。如何理解上面这句话?
假设有一个库表名字为CAR,该表有2列,分别为NAME和BRAND,其中有一条数据,NAME列和BRAND列都为NULL,当配置returnInstanceForEmptyRow=false时,返回的car对象也为NULL;当returnInstanceForEmptyRow=true时,返回的car对象是非NULL对象,只不过是这个实例对象中brand属性和name属性都为NULL。通过下面的例子就可明白

returnInstanceForEmptyRowtrue_4">1. 当returnInstanceForEmptyRow=true时

我们以CAR表为例,表中有2条数据,其中有一条name列和brand列都为NULL。
在这里插入图片描述
下面查询name列为NULL的数据,对应的mapper如下所示

<select id="select2" resultType="com.lzj.bean.Car">select * from car where name is null
</select>

对应的DAO为

package com.lzj.dao;import com.lzj.bean.Car;
import java.util.List;public interface CarDao {public List<Car> select2();
}

然后修改配置文件如下所示,主要是配置returnInstanceForEmptyRow=true

<settings><setting name="logImpl" value="STDOUT_LOGGING"/><setting name="returnInstanceForEmptyRow" value="true"/>
</settings>

一切就绪后执行下面的测试方法

public void sqlSessionTest2(){SqlSessionFactory factory = mybatisUtil.getFactory();SqlSession sqlSession = factory.openSession(true);  //true表示自动提交List<Car> cars = sqlSession.selectList("com.lzj.dao.CarDao.select2");System.out.println("个数: " + cars.size());System.out.println("cars: " + cars);sqlSession.close();
}

执行完测试方法后输出结果如下所示,通过日志可以看出,返回list中有1个car对象,对象中的name和brand属性都为null。

Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
Opening JDBC Connection
Created connection 79094208.
==>  Preparing: select * from car where name is null 
==> Parameters: 
<==    Columns: name, brand
<==        Row: null, null
<==      Total: 1
个数: 1
cars: [Car{name='null', brand='null'}]
Closing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@4b6e1c0]

returnInstanceForEmptyRowfalse_61">2 当returnInstanceForEmptyRow=false时

下面看一下当当returnInstanceForEmptyRow=false时返回的是什么对象,当然也可以不配置,因为该参数默认就是false的。还是以上面的例子来说,只是修改mybatis的配置文件如下所示

<settings><setting name="logImpl" value="STDOUT_LOGGING"/><setting name="returnInstanceForEmptyRow" value="false"/>
</settings>

然后再次运行上面测试案例输出结果如下所示,返回的list中同样也是只有1个对象,不过这个对象是空对象null。到这里再回到上面理解最开始的解释就一目了然了。

Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
Opening JDBC Connection
Created connection 1184248953.
==>  Preparing: select * from car where name is null 
==> Parameters: 
<==    Columns: name, brand
<==        Row: null, null
<==      Total: 1
个数: 1
cars: [null]
Closing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@46963479]

http://www.ppmy.cn/devtools/6418.html

相关文章

部署分布式LNMP系统

一、基础环境配置 主机名IP地址服务系统php192.168.235.140php-8.1.11CentOS 7nginx192.168.235.141nginx-1.20.2CentOS 7mysql one192.168.235.142mysql-5.7.38CentOS 7mysql two192.168.235.143mysql-5.7.38CentOS 7 相关服务目录说明 nginx根目录&#xff1a;/usr/local/…

Flutter 的 showDialog 和 showCupertinoDialog 有什么区别?

我将我的 App 里用的 Flutter 升级到了 3.19&#xff0c;没想到&#xff0c;以前我用 showDialog 和 AlertDialog 组合创建的二次确认框&#xff0c;变得无敌难看了&#xff0c;大幅度增加了整个框的圆角和里面默认按钮的圆角。不得已&#xff0c;我必须修改一下&#xff0c;以…

Python 将PDF转为PDF/A和PDF/X,以及PDF/A转回PDF

PDF/A和PDF/X是两种有特定用途的PDF格式&#xff0c;具体查看以下&#xff1a; PDF/A是一种用于长期存档的PDF格式&#xff0c;它旨在确保文档的内容和格式在未来的访问中保持不变。如果您需要对文件进行长期存档&#xff0c;比如法律文件或档案记录&#xff0c;将其转换为PDF…

C# [Flags]属性

在C#中&#xff0c;当你看到[Flags]这个属性被用于枚举&#xff08;enum&#xff09;&#xff0c;它意味着这个枚举设计用来支持位运算&#xff0c;以便可以组合多个枚举值。这通常用于表示可以独立打开或关闭的多个选项或标志。 例如&#xff0c;考虑一个枚举&#xff0c;它代…

Ubuntu 微调训练ChatGLM3大语言模型

Ubuntu 微调训练ChatGLM3大语言模型 LLaMA Factory 的 LoRA 微调提供了 3.7 倍的加速比&#xff0c;同时在广告文案生成任务上取得了更高的 Rouge 分数。结合 4 比特量化技术&#xff0c;LLaMA Factory 的 QLoRA 微调进一步降低了 GPU 显存消耗。 https://github.com/hiyouga…

2233: 【数学】因子游戏

题目描述 桐桐把一个自然数N的正因子个数记为F(N)&#xff0c;例如18的所有正因子为1、2、3、6、9、18&#xff0c;所以F(18)6。现在给出K&#xff0c;桐桐想求出所有满足F(N)K的N中最小的数&#xff0c;你能帮助她吗&#xff1f; 输入 第1行为K&#xff0c;其中0<K<8…

9 个非常流行的Python可视化工具及示例

9 个非常流行的Python可视化工具及应用 1. Matplotlib Matplotlib是一个强大的绘图工具.支持生成各种类型的图表. #示例:绘制简单折线图import matplotlib.pyplot as pltx [1, 2, 3, 4, 5] y [10, 15, 13, 18, 16]plt.plot(x, y) plt.xlabel(X轴) plt.ylabel(Y轴) plt.titl…

李沐45_SSD实现——自学笔记

主体思路&#xff1a; 1.生成一堆锚框 2.根据真实标签为每个锚框打标(类别、偏移、mask) 3.模型为每个锚框做一个预测(类别、偏移) 4.计算上述二者的差异损失&#xff0c;以更新模型weights 先读取一张图像。 它的高度和宽度分别为561和728像素。 %matplotlib inline import …