Как использовать MyBatis для итерации всех полей объекта?

0

Я хочу вставить все поля объекта в строку, но я не знаю точных имен полей. MyBatis поддерживает это?

  • 0
    Пожалуйста, приведите пример вашего класса и столбцов таблицы.
  • 0
    Пожалуйста, добавьте свой код, чтобы я мог привести несколько примеров.
Теги:
mybatis

3 ответа

1
Лучший ответ

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
0

Я думаю, вы должны с помощью оператора SQL select into, чтобы выполнить это требование.

  • 0
    Добро пожаловать в Stackoverflow. Ваш ответ будет улучшен путем показа примера кода. Вопрос конкретно о MyBatis, и мне интересно, отвечает ли ваш ответ на этот вопрос.
0

Ваши 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, а автоматическое сопоставление должно быть истинным. может быть, вы должны дать некоторые коды вашего проекта, поэтому я дам вам больше советов

  • 0
    Как autoMapping связан со вставкой?
  • 0
    спасибо за напоминание, автоматическое отображение не связано с вставкой

Ещё вопросы

Сообщество Overcoder
Наверх
Меню