SQL Objects API - 获取所有列?

时间:2015-02-04 22:57:37

标签: jdbi

我在数据访问对象的以下代码行中使用SQL对象API从SQL表中的一行获取名称字段,其中ID与提供的ID匹配。

@SqlQuery("select name from users where id = :id")
String findNameById(@Bind("id") int id);

这一切都很好,但如果我想返回表格中该行的所有字段,而不仅仅是名称,还有该记录的所有字符串,我该怎么做呢?

我确实尝试过使用:

"select * from users where id = :id"

但是这不对,它似乎只返回id字段(可能因为它是表中的第一列,我的方法返回一个字符串?)

无论如何,我完全没有这方面的想法,并希望得到所有帮助。


我收到信息请求时的其他信息:

这是调用我的dao的控制器中我方法的方法签名。

public String retrieveUserRecord(@PathParam("id") int id)

如您所见,它返回一个字符串,dao中的findNameByID方法也是如此...

我想要做的是使用我的方法签名传递id,如果可能的话,将我的所有列作为一个好的JSON对象返回?

1 个答案:

答案 0 :(得分:4)

当您想要获取所有字段时,返回类型不应该是字符串。我假设你有'用户'像这样的模特。

  public class User {
     private Integer id;
     private String name;

    public User(id, name) {
      this.id = id;
      this.name = name;
   }
  }

有一些方法可以将DB结果映射到Java模型。您应该为类用户创建映射器。

 public class UserMapper<User>  implements ResultSetMapper<User> {
         public User map(int row, ResultSet rs, StatementContext ctx) throws SQLException { 
         return new User(rs.getInt("id"), rs.getString("name") );
         }
}

你应该在sqlObject api中提到这个mapper。

@SqlQuery("select * from users where id = :id")
@Mapper(UserMapper.class)
String retrieveUserRecord(@Bind("id") int id);

如果你有setter&amp; amp;还可以使用MapResultAsBean。模特中的傻瓜。

您也可以使用this library