Moh*_*rma 8 java ibatis mybatis
在mybatis中使用注释,我们可以将返回类型作为普通地图吗?
基本上,我想要这样的东西
@Select("select a, b from tableA")
public Map<String, String> getItems();
Run Code Online (Sandbox Code Playgroud)
哪里
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 | |
+-------+-------------+------+-----+---------+-------+
Run Code Online (Sandbox Code Playgroud)
试过这个
@Select("select a, b from tableA")
@MapKey("a)
public Map<String, String> getItems();
Run Code Online (Sandbox Code Playgroud)
但是它给出了以下异常
### Cause: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'a' in 'class java.lang.String'
Run Code Online (Sandbox Code Playgroud)
Dmi*_*eev 11
这是我如何做到这一点,没有额外的方法将List转换为Map:
这是Message类
public class Message {
private String code;
private String message;
GETTERS/SETTERS
}
Run Code Online (Sandbox Code Playgroud)
映射器
@Select("SELECT code, message FROM MESSAGES")
@MapKey("code")
public Map<String, Message> selectAllMessages();
Run Code Online (Sandbox Code Playgroud)
不幸的是,创建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;
}
Run Code Online (Sandbox Code Playgroud)
@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')))
Run Code Online (Sandbox Code Playgroud)
并且该功能mapFromListOfMap将使它成为这样的东西
Map ((key=>'1',value=>'a'),(key=>'2',value=>'b'),(key=>'3',value=>'c'))
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助 :)
@MapKey(a) 将返回一个地图,其中您的结果由 a 键入
编辑:有趣的结果。还没有尝试使用注释(使用映射器代替),但据我所知,它看起来期望映射是HashMap<someA, someB>someA 有一个 getter 和一个 setter 的“a”(如 getA,setA)...你甚至可以使用相同的类(哈希映射
| 归档时间: |
|
| 查看次数: |
23703 次 |
| 最近记录: |