libro
www.tuyano.com
初心者のためのSpring Bootプログラミング入門

JpaRepositoryでデータベースアクセスしよう! (3/6)

作成:2014-07-05 10:46
更新:2014-07-05 10:46

■IDによるエンティティの検索

続いて、IDによる検索を行いましょう。指定したIDのエンティティ検索は、「getOne」というメソッドで行うことができます。これは以下のように利用します。
変数 = リポジトリ.getOne( id );

引数には、IDの値(ここではint値)を指定します。返値は、検索されたエンティティのインスタンス(ここではMyData)になります。findAllのようにIterableではなく、ただエンティティのインスタンスが1つだけ返されます。

下に簡単な利用例を挙げておきましょう。helo.jspに検索用のフォームを追加し、このフォームをPOSTした時の処理用メソッドをSampleControllerに追加しておきます。送信されたIDの値を引数に指定してgetOneするだけですね。

いくつか注意点があります。まずgetOneですが、指定したIDのエンティティが見つからないと、EntityNotFoundExceptionという例外が発生します。サンプルでは特に例外処理などしてないので、実際の利用の際には例外時の処理などを考えたほうがよいでしょう。

それから、IDの指定について。ここではrepository.getOne(id);というようにメソッドの引数をそのまま使っていますね。これは、@RequestParam("find") int idというように、int値としてフォームから送られた値を受け取るようにしているためです。@RequestParamは、別にStringで受け取らないといけないわけではありません。必要に応じて別の型で取り出すこともできます。

また、ここではIDはint値にしていますが、これもそうしなければいけないわけではありません。MyDataエンティティクラスを定義する際、@IdInteger id;という形でフィールドを指定したため、それに揃えているだけです。@Idのフィールドは別の型を使っても構いませんし、その場合にはgetOneで指定する引数の型も変わります。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

※helo.jspのボディ

<body>
        <h1>Hello!</h1>
        <form method="post" action="/find">
            <input type="text" name="find"><br>
            <input type="submit">
        </form>
        <p class="msg">${datas}</p>
        <hr>
        <form method="post" action="/post">
            <input type="text" name="name"><br>
            <input type="text" name="mail"><br>
            <input type="text" name="tel"><br>
            <input type="text" name="age"><br>
            <input type="submit">
        </form>
</body>

※SampleControllerへ追加するメソッド

@RequestMapping(value="/find", method=RequestMethod.POST)
public String find(Model model, @RequestParam("find") int id) {
        MyData data = repository.getOne(id);
        model.addAttribute("datas", data);
    return "helo";
}

※関連コンテンツ

「初心者のためのSpring Bootプログラミング入門」に戻る