LoginSignup
0
0

【Java】jdbctemplateメモ(DataClassRowMapper)

Posted at

jdbctemplateでDBのデータを扱う際の型について

現在SoringBootについて学習中ですが、参考書(プロになるためのSpring入門)にて、jdbctemplateの使用方法で便利な機能を見つけたので忘れないようにアウトプットするために下記に殴り書きしていきます。

SpringBootのjdbctemplateにてDBから1レコードを取り出す際に、
今まではqueryForMapを使用してDAOファイルで変換を行っていました。

下記のコードは予約管理システムに使用した予約情報をIDを使用して検索するためのコードです。
引数で予約に紐づくIDを受け取りReserve型をインスタンス化して型ごとにmapを使用して変換していました。

    public Reserve idFind(String id) {
        String sql = "SELECT * FROM reserve WHERE id = ?";
        try {
            Map<String, Object> map = jdbcTemplate.queryForMap(sql, id);
            Reserve reserve = new Reserve(
                    map.get("id").toString(),
                    ((Date) (map.get("date"))).toLocalDate(),
                    ((Time) map.get("time")).toLocalTime(),
                    map.get("menu").toString(),
                    map.get("name").toString(),
                    map.get("email").toString(),
                    map.get("tel").toString());
            return reserve;
        } catch (IncorrectResultSizeDataAccessException e) {
            return null;
        }
    }

このコードでもデータを取り出すことは可能ですが、どうしても可読性が悪くなると書いているときから感じていました。
DataClassRowMapperを使用することにより、DBからデータを取り出しする際に自動で変換してくれるのでわざわざ変換するためのコードを書かなくてよい。
公式リファレンス(DataClassRowMapper)

これを使用し、書き換えたコードが以下。

    public Reserve idFind(String id) {
        String sql = "SELECT * FROM reserve WHERE id = ?";
        try {
            Reserve reserve = jdbcTemplate.queryForObject(sql,new DataClassRowMapper<>(Reserve.class),id);
            return reserve;
        } catch (IncorrectResultSizeDataAccessException e) {
            return null;
        }
    }

正直めちゃめちゃ便利です。。
もっと早く知りたかった(笑)

自分はまだまだ初心者のため、こういった便利な機能を参考書などで仕入れするしか方法がないのですが、ベテランエンジニアの皆さんはどういった方法で学習されているのかが気になります。
ぜひコメント欄で教えて下さい。🙇‍♂️

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0