如何使mybatis将列表映射到对象

时间:2019-03-13 09:09:27

标签: mybatis spring-mybatis

我有一个定义设备实体的设备表:

device:
   id:
   type:

我有一个属性表,其中记录了设备的属性:

device_attr:
   device_id:
   key:
   value:

如何编写映射器以将设备POJO保存到表中,以及如何将属性加载到POJO中?谢谢。

数据透视功能可能满足此要求,但是mysql不支持它,并且性能也不佳。

1 个答案:

答案 0 :(得分:1)

为了保存对象,您可以使用动态sql迭代POJO属性并生成INSERT语句,类似于How to use MyBatis to iterate all fields of an object?中所述:

<bind name="deviceProperties"
  value="@org.apache.commons.beanutils.BeanUtils@describe(myDevice).entrySet()" />

<foreach index="propertyName" item="propertyValue" collection="deviceProperties">
   INSERT INTO device_attr (key, value) values (
        ${propertyName}, ${propertyValue});
</foreach>

对于选择来说,没有开箱即用的解决方案。

您需要执行称为table pivot的操作,但这就是very database specific

另一个选择是从Java中的字段列表重新创建POJO。可以使用answer中所述的默认方法在mapper中完成。