java - Spring的存储过程,解析结果Map

标签 java hibernate spring stored-procedures dictionary

我在 MySQL 上安装了 Spring 和 Hibernate。 我有一个我想调用的 MySQL 存储过程。 该过程采用 2 个浮点参数,并返回一个包含 3 个字段的结果集。整数、整数、 float 。

我创建了一个扩展 spring 的 StoredProcedure 的类。 这是执行函数:

public Map execute(float longitude, float latiude) {
Map inparams = new HashMap(2);
inparams.put("longitude", (float) longitude);
inparams.put("latitude", (float) latiude);
Map out = execute(inparams);

问题是我不知道如何解析 map 结果。 调试的时候看到所有的result-set都在里面,但是排列的很奇怪,不知道怎么提取字段。

为了向您展示它的外观,我能做的最好的事情就是给您 out (Map) 的 toString() 在这里:

{#result-set-1=[{id=4, out1=100, distance=40.9}, {id=5, out1=100, distance=47.7}, {id=6, out1=100, distance=22.3}, {id=7, out1=100, distance=27.4}, {id=8, out1=100, distance=22.1}, {id=9, out1=100, distance=18.3}, {id=10, out1=100, distance=20.1}, {id=11, out1=100, distance=28.6}, {id=12, out1=100, distance=23.1}], #update-count-1=0}

最佳答案

我会在调试器中查看类型是什么; IntelliJ 可以轻松地告诉我这一点。

它看起来像一个 Map<String, Object>大部头书。键是“#result-set-1”和“#update-count-1”。

第一个键的值是映射列表,每行返回一个映射。键是列名,值是返回值。

第二个键的值是一个整数;它为零,因为您执行了 SELECT。

因此,为了将其拼写出来,这里是提取结果的方法(对于最初的编码错误,我们深表歉意):

// Foo is some unknown object that encapsulates each row.
List<Foo> results = new ArrayList<Foo>();
Map<String, Object> rows = (Map<String, Object>) out.get("#result-set-1");
for (Map row : rows) {
    int id = row.get("id");
    int out1 = row.get("out1");
    double distance = row.get("distance");
    results.add(new Foo(id, out1, distance));
}
return results;

关于java - Spring的存储过程,解析结果Map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8439765/

相关文章:

java - 如何在 Dropwizard 中实现 Guava 缓存?

linux - Spring aop作用域代理在Linux安装上不起作用

Java 拖动绘制的球

java - QueryDSL JPAAnnotation Processor 为单个类生成 QModel

java - 使用 Spring + hibernate + JPA 从表中选择特定列并将结果存储到非实体 POJO

Spring Data JPA - 多个 EnableJpaRepositories

java - Tasklet 在 spring batch 中删除一个表

java - 双 Pane 首选项屏幕的问题

java - 如何使用 Pig 将分组记录存储到多个文件中?

java - 使用内部连接使用 hibernate 返回多个对象类型