Как я могу отобразить результаты запроса MySQL на объекты Java? - PullRequest
0 голосов
/ 27 ноября 2018

Я создаю Dropwizard приложение, в котором я хочу легко отобразить результаты из базы данных MySQL в объекты Java.Я видел, как это делалось раньше с помощью Object mapper, так что я знаю, что это можно сделать, но, к сожалению, я не могу вспомнить, где и как.

Я создал неизменяемые классы и хотел бы отобразить значения вих.Вот пример неизменяемого:

@Value.Immutable
public interface Task {
    int getTaskId();
    int getCreatorId();
    String getTitle();
    String getDescription();
    int getCreatedAt();
}

Пока это мой DAO:

public interface TasksDAO {
    @SqlQuery("select task_id, title, description, creator_id, created_at from tasks")
    Set<ImmutableTask> getAllTasks();

    @SqlQuery("select task_id, title, description, creator_id, created_at from tasks where id = :id")
        ImmutableTask getTaskById(@Bind("id") int id);
}

Он работает с более простыми типами данных, такими как String или int.

1 Ответ

0 голосов
/ 27 ноября 2018

Для этого я создал простой картограф для моего объекта.Вот как выглядит Mapper:

public class TaskMapper implements ResultSetMapper<ImmutableTask> {
    public ImmutableTask map(int index, ResultSet r, StatementContext ctx) throws SQLException {
        return ImmutableTask.builder()
                .taskId(r.getInt("task_id"))
                .creatorId(r.getInt("creator_id"))
                .title(r.getString("title"))
                .description(r.getString("description"))
                .createdAt(r.getTimestamp("created_at"))
                .build();
    }
}

(Строитель потому, что он неизменный, но в других случаях его можно заменить на new Task())

Затем я обновил свой DAO аннотацией маппера, чтобы она выглядела так:

public interface TasksDAO {
    @SqlQuery("select task_id, title, description, creator_id, created_at from tasks")
    @Mapper(TaskMapper.class)
    Set<ImmutableTask> getAllTasks();

    @SqlQuery("select task_id, title, description, creator_id, created_at from tasks where task_id = :id")
    @Mapper(TaskMapper.class)
    ImmutableTask getTaskById(@Bind("id") int id);
}
...