Mybatis Как отобразить столбец из другой таблицы в список строк? - PullRequest
0 голосов
/ 09 марта 2019

У меня есть таблица t_comment и таблица t_comment_photo.

t_comment имеет идентификатор столбца, содержимое;t_comment_photo имеет идентификатор столбца, comment_id, photo_url.t_comment_pohto содержит URL фотографий с комментариями, комментарий может содержать от 0 до многих фотографий с комментариями.

Это их классы java:

public class ToyComment {
    private Integer id;
    private String content;
    private List<String> urls;
    ...
}
public class CommentPhoto {
    private Integer id;
    private String commentId;
    private String comment_url;
    ...
}

Вот содержание <select> в mapper:

<select id="getToyCommentList"
    resultType="com.domain.ToyComment">
    c.id, c.content,p.user_photo_url userPhoto
    from t_comment c left join t_comment_photo p
    on c.id = p.comment_id
</select>

Когда я пытаюсь сопоставить userPhoto, запрошенный из таблицы t_comment_photo, с элементом списка внутри класса Java ToyComment, я получаю ошибки.

Карта результата, которую я пытаюсь исправить,:

<resultMap id="ToyCommentResultMap" type="com.domain.ToyComment">
        <result column="id" jdbcType="VARCHAR" property="id" />
        <result column="content" jdbcType="VARCHAR" property="content" />
        <!-- <result property="urls"  jdbcType="VARCHAR" javaType="java.util.ArrayList" column="userPhoto" /> -->
        <collection property="urls" javaType="list" jdbcType="VARCHAR"  column="userPhoto"></collection>
    </resultMap> 

Я пробовал оба <property> и <collection>, но ни один из них не работает.

Когда я использовал <collection>, я получил сообщение «Коллекция Mapped Statements уже содержит значение для com.toy.mapper.ToyCommentMapper.getToyCommentListByToyId», когда я использовал <result>, я получил «Обработчик типов не найден для свойстваuserPhotos».Используйте «java.util.ArrayList» или «список», чтобы javaType не изменил ошибку вывода.

Я пытался найти «mybatis map to string list», но большинство из них касаются отображения в списокобъекты.

Как это исправить правильно?

1 Ответ

1 голос
/ 04 апреля 2019

Карта результатов должна выглядеть следующим образом:

<resultMap id="ToyCommentResultMap" type="com.domain.ToyComment">
  <id column="id" property="id" />
  <result column="content" property="content" />
  <collection property="urls" javaType="list"
    ofType="string">
    <result column="userPhoto" />
  </collection>
</resultMap>

Несколько примечаний:

  • Укажите <id /> при использовании <collection />.Это повышает эффективность и требуется в некоторых случаях.
  • В <select /> вам нужно указать resultMap вместо resultType (очевидно).
  • Это сложный случай, и мыНедавно добавили запись FAQ .
...