Java Dropwizard JDBI 3 ResultsUpper忽略字段
我有一个Pojo:Java Dropwizard JDBI 3 ResultsUpper忽略字段,java,postgresql,dropwizard,pojo,jdbi,Java,Postgresql,Dropwizard,Pojo,Jdbi,我有一个Pojo: private long id; @NotEmpty @JsonProperty("name") private String name; @NotEmpty @JsonProperty("id") private String tagUuid; @NotEmpty @JsonProperty("archived") private boolean archived; @NotEmpty
private long id;
@NotEmpty
@JsonProperty("name")
private String name;
@NotEmpty
@JsonProperty("id")
private String tagUuid;
@NotEmpty
@JsonProperty("archived")
private boolean archived;
@NotEmpty
@JsonProperty("creationDate")
private DateTime creationDate;
private Integer count;
@JsonCreator
public Tag() {
}
public Tag(long id, String tagUuid, String name, boolean archived, Timestamp creationDate, Integer count) {
this.id = id;
this.tagUuid = tagUuid;
this.name = name;
this.archived = archived;
this.creationDate = new DateTime(creationDate);
this.count = count;
}
这是我的结果集映射器:
public class TagMapper implements ResultSetMapper<Tag> {
@Override
public Tag map(int index, ResultSet r, StatementContext ctx) throws SQLException {
return new Tag(
r.getLong("id"),
r.getString("tag_uuid"),
r.getString("name"),
r.getBoolean("archived"),
r.getTimestamp("creation_date"),
r.getInt("count")
);
}
}
您只需在SQL查询中返回额外的列
@SqlQuery("SELECT t.id, t.tag_uuid as tag_uuid, t.name, t.archived, " +
"t.creation_date, 0 AS count FROM tags t " +
"WHERE t.tag_uuid = :tag_uuid LIMIT 1")
public Tag fetchTagByUuid(@Bind("tag_uuid") String tagUuid);
您可以根据需要检索值,并在将值传递给标记构造函数之前检查它们在结果集中是否存在。如果属性不存在,则可以传递属性的默认值。 您可以将该值检查为
r.getString(“tag_uid”)!=null
(用于字符串)
然后
tag\u uuid=r.getString(“tag\u uuid”)
谢谢。这就是我目前正在做的,但我想知道是否有更优雅的方法。另一种方法是,在尝试提取值之前,mapper类首先检查列是否可用。e、 g.使用findColumn或类似工具,然后捕获异常。
@SqlQuery("SELECT t.id, t.tag_uuid as tag_uuid, t.name, t.archived, " +
"t.creation_date, 0 AS count FROM tags t " +
"WHERE t.tag_uuid = :tag_uuid LIMIT 1")
public Tag fetchTagByUuid(@Bind("tag_uuid") String tagUuid);