3

データ アクセス オブジェクトの次のコード行で SQL オブジェクト API を使用して、ID が提供されたものと一致する SQL テーブルの行から名前フィールドを取得しています。

@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 を渡し、可能であればすべての列を 1 つの素敵な JSON オブジェクトとして取得することですか?

4

1 に答える 1

4

すべてのフィールドを取得する場合は、戻り値の型を文字列にしないでください。このような「USER」モデルがあると仮定しています。

  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 でこのマッパーについて言及する必要があります。

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

モデルにセッターとゲッターがある場合は、MapResultAsBean を使用することもできます。

このライブラリを使用することもできます。

于 2015-02-05T13:28:34.427 に答える