java - 如何将 MySQL 查询结果映射到 Java 对象?

标签 java mysql jdbc dropwizard

我正在构建一个 Dropwizard我想轻松地将 MySQL 数据库的结果映射到 java 对象的应用程序。我以前见过用对象映射器完成此操作,所以我知道它可以完成,但不幸的是我不记得在哪里或如何完成。

我创建了不可变类,我想将值映射到它们。这是一个不可变的示例:

@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);
}

它适用于更简单的数据类型,例如Stringint

最佳答案

为此,我为我的对象创建了一个简单的映射器。这就是映射器的样子:

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();
    }
}

(构建器是因为它是 Immutable,但在其他情况下可以用 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);
}

关于java - 如何将 MySQL 查询结果映射到 Java 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53490091/

相关文章:

java - Spring-HTTP Status 500 - 请求处理失败;嵌套异常是 java.lang.IllegalArgumentException : [￞] is not a hexadecimal digit

php - 插入语句不起作用

Mysql2::错误:不正确的字符串值:'\xE2\x80\xA8\x09

java - Unitils数据库异常

java - 即使在设置 c3p0.testConnectionOnCheckout=true 后,与 MySQL 的数据库连接也会超时

java - Spring JPA @Query注解,SQL地理定位错误

java - 为什么拆箱方法调用参数不会导致有用的 NullPointerException

java - wicket 是否执行 session 序列化?

java - 计算长度、面积和温度的两个spinner的乘法问题

mysql - 过滤表联合mysql中的行