MySql - соединение один ко многим, сопоставление JOIN с JDBI в список

for i in $(seq 1 $END); do echo $i; done

edit: Я предпочитаю seq по сравнению с другими методами, потому что я действительно могу его запомнить;)

0
задан hi.im.kvothe 15 January 2019 в 16:50
поделиться

1 ответ

Кажется, что вам нужно @UseRowReducer

Реализация для вашего примера будет выглядеть примерно так:

@SqlQuery("SELECT a." + AUTHOR_COLUMN MAMES + ", b." + BOOK_COLUMN_NAMES + " FROM authors as author" +
  " LEFT JOIN books AS book" +
  " ON author.id = book.authorId" +
  " WHERE id = :authorId")
@RegisterBeanMapper(value = Book.class, prefix = "b") 
@RegisterBeanMapper(value = AuthorWithBooks.class, prefix = "a")
@UseRowReducer(AuthorBookReducer.class) 
List<AuthorWithBooks> getAuthorWithBooks(@Bind("authorId") int authorId);

class AuthorBookReducer implements LinkedHashMapRowReducer<Integer, Author> { 
    @Override
    public void accumulate(Map<Integer, Author> map, RowView rowView) {
        Author author = map.computeIfAbsent(rowView.getColumn("a_id", Integer.class), 
                                       id -> rowView.getRow(Author.class));

        if (rowView.getColumn("b_id", Integer.class) != null) { 
            author.getBooks().add(rowView.getRow(Book.class));
        }
    }
}
0
ответ дан Spasa Mihajlovic 15 January 2019 в 16:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: