Составление карт в MyBatis - PullRequest
3 голосов
/ 25 января 2011

У меня возникли проблемы с отображением в MyBatis для Java, и я был бы признателен за помощь.Моя структура классов выглядит следующим образом:

//Getters/setters omitted for clarity

class Foo 
{
  int id;
  Bar bar;
}

class Bar {
  String x;
  int y;
}

Моя таблица выглядит следующим образом - то есть она не нормализована из структуры класса.

create table foo_bar (
  id int,
  x varchar,
  y int
);

Моя рабочая инструкция вставки способна де-нормализуйте, используя (bar.x, bar.y) параметры.

<insert id="insert" parameterType="foo">
  <![CDATA[
    insert into foo_bar
    (id, x, y) values
    (#{x}, #{bar.x}, #{bar.y})
  ]]>
</insert>

Итак, проблема:

Когда я выполню свой выбор, я бы хотел, чтобы результирующий объектбыть экземпляром Foo, имеющим ссылку на Bar.

Я не думаю, что смогу использовать обработчик типов, так как он работает над одним столбцом, и ассоциация не имеет смыслапоскольку «Бар» не является сущностью, явно представленной в базе данных через отношение внешнего ключа.

Может кто-нибудь показать мне рекомендуемый способ сделать это, пожалуйста?

Спасибо!

1 Ответ

3 голосов
/ 01 февраля 2011

Вы пытались использовать определение resultMap в вашем ibatis sqlmap?

<resultMap id="foobar-result" class="Foo">
    <result property="id" column="id"/>
    <result property="bar.x" column="x"/>
    <result property="bar.y" column="y"/>
</resultMap>

, а затем в вашем sql просто ссылка на карту результата:

<select id="getFooBar" resultMap="foobar-result">
...