我有一个定义设备实体的设备表:
device:
id:
type:
我有一个属性表,其中记录了设备的属性:
device_attr:
device_id:
key:
value:
如何编写映射器以将设备POJO保存到表中,以及如何将属性加载到POJO中?谢谢。
数据透视功能可能满足此要求,但是mysql不支持它,并且性能也不佳。
答案 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中完成。