繁体   English   中英

如何获得地图 <String, String> 作为使用mybatis注释的返回类型

[英]How to get Map<String, String> as return type using mybatis annotations

在mybatis中使用注释,我们可以将返回类型作为普通地图吗?

基本上,我想要这样的东西

@Select("select a, b from tableA")
public Map<String, String> getItems();

哪里

mysql> select * from tableA;
+------+------+
| a    | b    |
+------+------+
| 1    | a    |
| 2    | b    |
| 3    | c    |
+------+------+

mysql> desc tableA;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| a     | varchar(10) | YES  |     | NULL    |       |
| b     | varchar(10) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

试过这个

@Select("select a, b from tableA")
@MapKey("a)
public Map<String, String> getItems();

但是它给出了以下异常

### Cause: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'a' in 'class java.lang.String'

这是我如何做到这一点,没有额外的方法将List转换为Map:

这是Message类

public class Message {
   private String code;
   private String message;
   GETTERS/SETTERS
}

映射器

@Select("SELECT code, message FROM MESSAGES")
@MapKey("code")
public Map<String, Message> selectAllMessages();

不幸的是,创建Map <String,String>是不可能的

注释@Select("select a, b from tableA")将返回一个Map列表,其中每个映射将包含一个条目。 你可能会为它编写一个转换器。

public Map<Object,Object> mapFromListOfMap (List<Map> listOfMap ) {
  Map<Object,Object> map = new HashMap<Object,Object>();
  for(int i = 0; i < listOfMap.size(); i++) {
    Object key = (Object) listOfMap.get(i).get("a");
    Object value = (Object)listOfMap.get(i).get("b");
    map.put(key, value);
  }
  return map;
}

@Select("select a, b from tableA")将返回这样的内容

List[0] -> Map ((key=>'a',value=>1),((key=>'b',value=>'a')))
List[1] -> Map ((key=>'a',value=>2),((key=>'b',value=>'b')))
List[2] -> Map ((key=>'a',value=>3),((key=>'b',value=>'c')))

并且函数mapFromListOfMap将使它像这样

Map ((key=>'1',value=>'a'),(key=>'2',value=>'b'),(key=>'3',value=>'c'))

希望这可以帮助 :)

@MapKey(a)将返回一个地图,其结果由a键入

编辑:有趣的结果。 还没有尝试使用注释(使用mappers而不是)但是AFAIK看起来它希望地图是HashMap<someA, someB>其中someA有一个getter和一个setter for“a”(比如getA,setA)...你可以甚至使用相同的类(HashMap

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM