当前位置: 首页 > 知识库问答 >
问题:

Spring JdbcTemboard提供的queryForMap()和queryForList()方法究竟如何在内部工作?

拓拔谭三
2023-03-14

我正在学习Spring Core认证,我对使用JdbcTemboard有一些疑问。

我知道JdbcTemplate为我提供了不同的方法来执行查询(用SQL编写)。

所以我有以下方法:

1)queryForObject():

public long getPersonCount() {
    String sql = “select count(*) from PERSON”;
    return jdbcTemplate.queryForObject(sql, Long.class);
}

因此,在这个方法中,我指定了两个参数,分别表示SQL语句和返回对象的类类型。在前一种情况下,指定将查询结果返回到长对象中。

如果查询返回的结果与指定的类型不匹配会发生什么?(例如,如果查询返回一个String并且我指定了queryForObject()方法的Long as参数?如何处理这种情况?

2)queryForMap():

public Map getPersonInfo(int id) {
    String sql = “select * from PERSON where id=?”;
    return jdbcTemplate.queryForMap(sql, id);
}

读取留档时,我觉得只有当知道我的查询返回单行时才使用它。它正确吗?

所以现在我对queryForMap()方法的使用有一个疑问。

我知道地图界面使用系统存储对象。

因此,人们认为一张地图可以存储多对夫妇。因此,我认为这可以存储多行:映射的键是表中一行的键,值包含其他列的值(到对象中)。

但queryForMap()方法的逻辑似乎大不相同。它究竟是如何工作的?

也许它会返回一个这样工作的映射:

键:包含表主键的键,与此键关联的是与我的表的其他字段的内容相关的多个值。还是怎样

3)queryForList():

public List getAllPersonInfo() {
    String sql = “select * from PERSON”;
    return jdbcTemplate.queryForList(sql);
}

阅读文档时,在我看来,当我的查询返回多行时,就会使用它。在我看来,方法输出是一个映射列表(因此,根据前面的方法,每个映射表示一个返回的行**(但前面关于如何将行存储到映射中的疑问仍然存在)。

你能帮我深入了解这些方法到底是如何工作的吗?

Tnx公司

共有2个答案

卫念
2023-03-14

要获取每行包含映射的行列表,请执行以下操作:

List<Map<String, Object>> rsMapList = jdbcTemplate.queryForList(sql, params);
姜正初
2023-03-14
  1. 你会得到一个例外。您可以编写一个测试来确认它
 类似资料:
  • 内部构造函数的准确定义是什么?在Julia-V0.6+中,“任何可以使用签名(注意部分)调用的构造函数都是内部构造函数”是正确的吗? 正如下面的注释中所讨论的,仅限于外部的构造函数实际上是吗? 使用检查方法是否是内部/外部构造函数是否正确? Julia自动定义的默认构造函数与用户显式定义的相应构造函数有什么不同? 顺便说一句,我知道如何使用以及何时使用内部构造函数。我知道什么是内部构造函数,直到只

  • 本文向大家介绍深入探究C++ string的内部究竟是什么样的,包括了深入探究C++ string的内部究竟是什么样的的使用技巧和注意事项,需要的朋友参考一下 在C语言中,有两种方式表示字符串: 一种是用字符数组来容纳字符串,例如char str[10] = "abc",这样的字符串是可读写的; 一种是使用字符串常量,例如char *str = "abc",这样的字符串只能读,不能写。 两种形式总

  • 我一直在弄清楚口译员的确切工作方式,在谷歌上搜索了一下,得出了一些结论,只是希望有人能纠正一下,让我更好地了解口译员的工作。 所以我的理解是: 解释器是一种将代码从高级语言转换为机器格式的软件程序 现在我仍然不清楚中间发生的子过程,即。 解释器产生中间代码 然后优化解释的代码 然后生成目标代码 并最终执行 还有一些问题: 那么解释器是否单独负责生成目标代码?并执行它? 执行是否意味着它在JVM或底

  • 匿名类保存对封闭类的引用。 在下面的示例中,我创建了一个小活动。在onCreate方法中,我只需在另一个线程上添加一个计时器,添加一个CompositeDisposable并在onDestroy中清除它。 显然,如果没有CompositeDisposable,它将导致内存泄漏。使用CompositeDisposable不会造成任何内存泄漏,但它是如何工作的? RxJava只是中断Thread并在每

  • 问题内容: 我遇到了使用方法的一段代码。不知道这叫什么,我很难找到它。 这是我尝试了解的内容: 结果: 但是,我认为这是在运行时发生的,它会告诉编译器确实是一个字符串,并且可以用来告诉编译器变量是某种类型的。我的理解正确吗? 游乐场 问题答案: 被称为 类型断言 。如 有效围棋中所述 : 类型断言采用接口值并从中提取指定的显式类型的值。 因此,是的,您从类型断言中获得的值不是接口值,而是显式类型。

  • 据我所知,我已经阅读了很多关于HTTP方法差异和确切优势的资源,这似乎是一份更好地理解和使用RESTAPI的合同。我的困惑如下: 我有一个表格: 我有一张这样的桌子: 在控制器中,我更新了我们发送的所有请求字段。 所有的PUT、PATCH和POST方法都以相同的方式工作<如果PUT应该完全重新生成资源,则它不会将input3更改为NULL。补丁更改了input1和input2。POST的工作原理也