Java 番石榴多图MyBatis

Java 番石榴多图MyBatis,java,guava,mybatis,spring-mybatis,Java,Guava,Mybatis,Spring Mybatis,我想将其用作with,以返回一个包含多个一对多条目的集合的结果集,但我无法找出相同的确切语法。以下是我的表格示例: +----+---------+----------+-------------+ | ID | PART_ID | NAME | PART_FAMILY | +----+---------+----------+-------------+ | 1 | 1 | bush | 300 | | 2 | 1 | a-bush

我想将其用作with,以返回一个包含多个一对多条目的集合的结果集,但我无法找出相同的确切语法。以下是我的表格示例:

+----+---------+----------+-------------+
| ID | PART_ID | NAME     | PART_FAMILY |
+----+---------+----------+-------------+
|  1 |       1 | bush     |         300 |
|  2 |       1 | a-bush   |         300 |
|  3 |       1 | 300-bush |         300 |
|  4 |       2 | nut      |         301 |
+----+---------+----------+-------------+
我想要一个结果集,这样我就有一个番石榴多重映射,其中PART_ID作为键,NAME和PART_FAMILY作为结果

Ex:

Index 0 :
    Key : 1 //PART_ID
    Value : [NAME: bush, PART_FAMILY: 300]
Index 1 :
    Key : 1
    Value : [NAME: a-bush, PART_FAMILY: 300]
Index 2 :
    Key : 1
    Value : (NAME: 300-bush, PART_FAMILY: 300)  
Index 3 :
    Key : 2
    Value : (NAME: nut, PART_FAMILY: 301)   
以下是我的疑问:

<resultMap id="partsMap" type="com.google.common.collect.Multimap">
    <id column="PART_ID" property="key" />
    //Not sure what to put here
</resultMap>

<select id="getParts" resultMap="partsMap">
    SELECT 
    PART_ID, NAME, PART_FAMILY
    FROM PART_NAMES
    WHERE ${filter}
    ORDER BY PART_ID
</select>

//不知道该在这里放什么
挑选
零件ID、名称、零件族
从第四部分开始
其中${filter}
按零件号订购
我需要以下几点帮助:

  • mybatis能否按照我上面所描述的,以番石榴多重图的形式返回a结果图
  • 如果是的话,你能帮我解释一下相同的语法吗
  • 如果否,那么如何获得示例中提到的结果集

  • 提前谢谢

    你试过了吗?可以吗?@Eugene,是的,我试过了,它抛出了以下异常:查询数据库时出错。原因:org.apache.ibatis.reflection.ReflectionException:使用无效类型()或值()实例化接口com.google.common.collect.Multimap时出错。原因:java.lang.NoSuchMethodException:com.google.common.collect.Multimap。()好的,显然mybatis正试图通过默认构造函数初始化
    Multimap
    ,而默认构造函数显然不存在。多重映射仅在创建时或通过构建器填充,因为它们是不可变的。我认为您唯一的选择是创建一个
    Map
    ,然后使用一些工厂方法来创建一个
    MultiMap
    。@OlivierGrégoire,我可以扩展MultiMap,提供一个构造函数,然后使用这个新类吗?当然可以!对于该用例,您可能应该使用
    ForwardingMultimap
    。这样,您只需定义以下内容:
    public类MyMultimap扩展ForwardingMultimap{private Multimap delegate=HashMultimap.create();public MyMultimap(){}@Override public Multimap delegate(){return delegate;}
    。不过,我实在帮不上忙。