Mybatis использует OGNL в местах, где ожидается выражение, включая collection
атрибут foreach
.
OGNL позволяет вызывать статические методы, чтобы вы могли использовать это.
С помощью обработчика сценариев по умолчанию (при условии, что имена свойств совпадают с именами столбцов), вы можете сделать что-то вроде этого для генерации списка полей:
<bind name="objectProperties"
value="@org.apache.commons.beanutils.BeanUtils@describe(myParameter).entrySet()" />
INSERT INTO mytable (
<foreach index="propertyName" item="propertyValue"
collection="objectProperties" separator=",">
${propertyName}
</foreach>
)
VALUES (
<foreach index="propertyName" item="propertyValue"
collection="objectProperties" separator=",">
@{propertyValue}
</foreach>
)
Обратите внимание, что это не было проверено и приведено здесь лишь для того, чтобы продемонстрировать идею, как вы можете подойти к этому.
Лично я не использовал foreach
, так как предпочитаю использовать движок скриптинга скорости . С помощью движка скриптинга скорости это можно сделать:
#set( $objectProperties = $BeanUtils.describe($myParameter) )
INSERT INTO mytable (
#foreach($property in $objectProperties)
${property.key}
#end
)
VALUES (
#foreach($property in $objectProperties)
@{property.value}
#end
)
Вам также необходимо добавить ссылку на класс BeanUtils
commons в контекст скорости, добавив эту конфигурацию в mybatis-velocity.properties
:
additional.context.attributes=BeanUtils:org.apache.commons.beanutils.BeanUtils