Jdbi: 列表的 ResultSetMapper<map object="">&gt; 对于 SqlQuery</map>

创建于 2013-10-07  ·  5评论  ·  资料来源: jdbi/jdbi

你好,
我正在尝试以与返回的 handle.select 相同的方式为常规 SqlQuery 创建映射器
地图字符串、对象列表

代码示例:

public interface SomeQueries
{
    @SqlQuery("select * from SOMETABLE")
    @Mapper(MapMappper.class)
    public List<Map<String, Object>> sqlQuery();
}

public class MapMappper implements ResultSetMapper<List<Map<String, Object>>> {

    <strong i="9">@Override</strong>
    public List<Map<String, Object>> map(int index, ResultSet r, StatementContext ctx) throws SQLException {
        System.out.println(r);
        Map<String, Object> obj = new HashMap<String, Object>();
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();

        list.add(obj);
        return list;
    }
}

但是我遇到了异常:无法访问映射器

最有用的评论

尝试这个:

public class MapMapper implements ResultSetMapper<Map<String, Object>> {
    <strong i="6">@Override</strong>
    public Map<String, Object> map(int index, ResultSet r, StatementContext ctx) throws SQLException {
        Map<String, Object> map = new HashMap<String, Object>();
        for (int i = 1; i <= r.getMetaData().getColumnCount(); i++) {
            map.put(r.getMetaData().getColumnLabel(), r.getObject(i));
        }
        return map;
    }
}

我应该指出,Query 使用的默认映射器已经作为公共 API 提供:org.skife.jdbi.v2.DefaultMapper。 如果需要,您可以直接使用它。

所有5条评论

解决了吗? 我也遇到同样的问题。

嗨,如果您遇到异常,您能否发布您看到的确切异常跟踪? 如果需要进一步调试,一个自包含的代码示例也很有用。

我相信问题是你的映射器地图列表> 相反
只是地图. ResultSetMapper 映射单行结果
放。 将其放入列表是 Query 的工作,而不是映射器。

-马修

2017 年 1 月 2 日 04:23,“Алексей Попрядухин” [email protected]写道:

org.skife.jdbi.v2.MappingRegistry$1:没有注册映射器
java.util.Map
在 org.skife.jdbi.v2.MappingRegistry.mapperFor(MappingRegistry.java:83)
在 org.skife.jdbi.v2.RegisteredMapper.map(RegisteredMapper.java:35)
在 org.skife.jdbi.v2.Query$4.munge(Query.java:183)
在 org.skife.jdbi.v2.QueryResultSetMunger.munge(
QueryResultSetMunger.java:41)
在 org.skife.jdbi.v2.SQLStatement.internalExecute(SQLStatement.java:1344)
在 org.skife.jdbi.v2.Query.fold(Query.java:173)
在 org.skife.jdbi.v2.Query.list(Query.java:82)
在 org.skife.jdbi.v2.sqlobject.ResultReturnThing$
IterableReturningThing.result(ResultReturnThing.java:253)
在 org.skife.jdbi.v2.sqlobject.ResultReturnThing.map(
ResultReturnThing.java:46)
在 org.skife.jdbi.v2.sqlobject.QueryHandler.invoke(QueryHandler.java:41)
在 org.skife.jdbi.v2.sqlobject.SqlObject.invoke(SqlObject.java:220)
在 org.skife.jdbi.v2.sqlobject.SqlObject$2.intercept(SqlObject.java:111)
在 org.skife.jdbi.v2.sqlobject.CloseInternalDoNotUseThisClass
$$EnhancerByCGLIB$$33103a76.selectTempChatMessages()


您收到此消息是因为您订阅了此线程。
直接回复此邮件,在 GitHub 上查看
https://github.com/jdbi/jdbi/issues/81#issuecomment-269960388或静音
线程
https://github.com/notifications/unsubscribe-auth/AACW5cJdVzRYKloa4Q-kOIfF6rgavit-ks5rON49gaJpZM4BEn1-
.

尝试这个:

public class MapMapper implements ResultSetMapper<Map<String, Object>> {
    <strong i="6">@Override</strong>
    public Map<String, Object> map(int index, ResultSet r, StatementContext ctx) throws SQLException {
        Map<String, Object> map = new HashMap<String, Object>();
        for (int i = 1; i <= r.getMetaData().getColumnCount(); i++) {
            map.put(r.getMetaData().getColumnLabel(), r.getObject(i));
        }
        return map;
    }
}

我应该指出,Query 使用的默认映射器已经作为公共 API 提供:org.skife.jdbi.v2.DefaultMapper。 如果需要,您可以直接使用它。

@qualidafial ,非常感谢。 这才是真正的帮助。 我像任何事情一样挣扎:)最终你的答案是正确的。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

rherrmann picture rherrmann  ·  4评论

anjeyy picture anjeyy  ·  3评论

Romqa picture Romqa  ·  5评论

jarlah picture jarlah  ·  3评论

agavrilov76 picture agavrilov76  ·  5评论