我正在攻读Spring Core认证,我对使用 JdbcTemplate 有一些疑问。
我知道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 界面使用 系统存储对象。
因此,地图被认为会存储多个 对。所以我认为这可以存储多行:Map的键是我表的一行的键,值包含其他列的值(到对象中)。
但似乎 queryForMap()方法的逻辑非常不同。它是如何工作的?
也许它会返回一个以这种方式工作的地图:
键:包含表的主键的键,并且与此键关联的多个值与我表的其他字段的内容相关。或者是什么?
3) queryForList():
public List getAllPersonInfo() {
String sql = “select * from PERSON”;
return jdbcTemplate.queryForList(sql);
}
在我看来,当我希望我的查询返回多行时,会使用它来阅读文档。在我看来,方法输出是一个 Map的列表(所以根据前面的方法,每个Map代表一个返回的行**(但前面有关行如何存储到一个行中的疑问)地图仍然存在)。
你能帮助我深入了解这些方法是如何运作的吗?
TNX
答案 0 :(得分:9)
答案 1 :(得分:0)
获取包含每行地图的行列表:
List<Map<String, Object>> rsMapList = jdbcTemplate.queryForList(sql, params);