你好,
我正在尝试以与返回的 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;
}
}
但是我遇到了异常:无法访问映射器
解决了吗? 我也遇到同样的问题。
嗨,如果您遇到异常,您能否发布您看到的确切异常跟踪? 如果需要进一步调试,一个自包含的代码示例也很有用。
我相信问题是你的映射器地图列表
-马修
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 ,非常感谢。 这才是真正的帮助。 我像任何事情一样挣扎:)最终你的答案是正确的。
最有用的评论
尝试这个:
我应该指出,Query 使用的默认映射器已经作为公共 API 提供:org.skife.jdbi.v2.DefaultMapper。 如果需要,您可以直接使用它。