Я хочу вставить все поля объекта в строку, но я не знаю точных имен полей. MyBatis поддерживает это?
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
в контекст скорости, добавив эту конфигурацию в mybatis-velocity.properties
:
additional.context.attributes=BeanUtils:org.apache.commons.beanutils.BeanUtils
Я думаю, вы должны с помощью оператора SQL select into
, чтобы выполнить это требование.
Ваши s properties should be consistent with the table
pojo s properties should be consistent with the table
столбцам s properties should be consistent with the table
, а автоматическое сопоставление должно быть истинным. может быть, вы должны дать некоторые коды вашего проекта, поэтому я дам вам больше советов
autoMapping
связан со вставкой?