gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:55:12 26 4
gpt4 key购买 nike

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

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

所以我有以下方法:

1) queryForObject():

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

所以在这个方法中我指定了2个参数,分别代表SQL语句和返回对象的类型。在前面的例子中,指定查询结果返回到一个 Long 对象中。

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

2) queryForMap():

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

在我看来,阅读文档似乎只有在知道我的查询返回单行时才使用它。是否正确?

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

我知道 Map 接口(interface)使用 系统存储对象。

所以一个Map被认为可以存储多个对。所以我认为这可以存储多行:Map 的键是我表中一行的键,值包含其他列的值(到一个对象中)。

但是queryForMap() 方法的逻辑似乎很不一样。它具体是如何工作的?

也许它返回一个以这种方式工作的 map :

key:包含表的主键的键,并且与此键相关联的多个值与我的表的其他字段的内容相关。或者什么?

3) queryForList():

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

在我看来,阅读文档时我希望我的查询返回多行时使用它。在我看来,方法输出是一个 Map 列表(因此根据之前的方法,每个 Map 代表一个返回的行**(但之前对如何将行存储到 map 仍然存在)。

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

谢谢

最佳答案

  1. 你会得到一个异常(exception)。您可以简单地编写一个测试来确认它。
  2. 该方法的文档说:查询应该是单行查询,所以是的,查询应该返回单行。它还说:返回:结果 Map(每列一个条目,使用列名作为键),这应该消除您的疑虑并反驳您的错误假设。
  3. 文档说:结果将被映射到映射列表(每行一个条目)(每列一个条目,使用列名作为键),这又一次应该足以消除你的疑虑并反驳你的错误假设。

关于java - Spring JdbcTemplate 提供的 queryForMap() 和 queryForList() 方法在内部究竟是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27471993/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com