MyBatis 3.x пытается прочитать коллекцию и заполнить объекты - PullRequest
2 голосов
/ 02 февраля 2012

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

Я пытаюсь прочитать данные вложенной таблицы. Столбец вложенной таблицы состоит из набора пользовательских объектов, определенных Oracle. Чтобы быть более точным, каждая запись в таблице связана с коллекцией пользовательских объектов, а пользовательский объект состоит из трех полей, а именно nickname, date of birth и address.

Я на самом деле получаю тип данных oracle.sql.ARRAY при попытке получить данные. У меня проблема в том, что я не могу отобразить этот oracle.sql.ARRAY, который извлекается JDBC через MyBatis, на мои объекты. Все, что я могу сделать, это заставить ARRAY привести его к массиву объектов, а затем в Struct и выполнить итерацию по атрибутам, чтобы получить значения.

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

Ответы [ 2 ]

1 голос
/ 03 февраля 2012

Я думаю, вы можете заставить это работать с пользовательским TypeHandler.

В своей ResultMap сделайте что-то вроде этого:

<result property="arrayOne" column="array[1]" typeHandler="customArrayHandler" />
<result property="arrayTwo" column="array[2]" typeHandler="customArrayHandler" />

Затем в вашей реализации CustomArrayHandler.getResult() вы можете проанализировать реальное имя столбца и выполнить индексирование. Затем извлеките массив из ResultSet и получите необходимое значение из индекса.

1 голос
/ 02 февраля 2012

Это потребовало бы большого количества специфичного для Oracle кода в Mybatis, и я знаю, что они вообще пытались избегать специфичного для RDMS кода. Я бы написал ваши собственные средства отображения данных для сопоставления массивов с любыми необходимыми объектами модели.

...