Spring BootにおけるRepository操作

本日のお題

今回のお題はSpring BootにおけるRepositoryの操作です。

Repositoryとはそもそも何ぞやという話ですが、DB操作に関する処理を記述する部分、ぐらいに考えています。

ファイルの作成

com/example/demo/helloディレクトリにHelloRepository.javaを作成します。

ModelやControllerと同じクラスですね。

ファイルの編集〜準備編

ファイルを用意したら、例によって必要なもののimportなどをしていきます。

package com.example.demo.hello;

import java.util.map;

import org.springframework.beans.factroy.annotation.Autowirede;

import org.springframework.jdbc.core.JdbcTemplate;

import org.springframework.stereotype.Repository;

 

ちなみに、上記の記述を書いている途中で赤や黄色のアンダーラインで警告されますが、とりあえずは気にしなくて大丈夫です。

 

importしたのに使っていないものがあるよ、という意味なので、この後に続けてファイルの中身を書いているうちに全て消えます。

ファイルの編集〜DB操作関数

必要なものの準備ができたので、いよいよDB操作の関数を書いていきます。

@Repository

public class HelloRepository{
    @Autowired

    private JdbcTemplate jdcbTemplate;

    public Map<String, Object> findById(String id){

        String query = "SELECT *" + " FROM employee" + " WHERE id=?";

        Map<String, Object> employee = jdbcTemplate.queryForMap(query, id);

        return emplyee;

    }

}

ややこしいですね。

私は初見では全く理解できませんでした。

一つずつ順番に見ていきます。

個別解説

@Repository

この後の記述はRepository、すなわちDB操作に関するものであることを明示します。

 

public class HelloRepository

DB操作のための関数を、HelloRepositoryクラスのインスタンスメソッドとして定義します。

 

private JdbcTemplate jdbcTemplate;

JdbcTemplateクラスのjdbcTemplateというインスタンスフィールドを定義しています。

JdbcTemplateとはSpringBootに用意されているDB操作のためのテンプレートで、これを用いることでDB操作が容易になります。

 

public Map<String, Object> findById(String id){}

findByIdという関数を定義しています。

引数として"id"というString型の変数を与えると、戻り値としてidとそのidに対応したインスタンスをセットで返します。

Mapというのは他の言語でいうところの連想配列ですね。

 

String query = "SELECT *" + " FROM employee" + " WHERE id=?"

この後のDB操作で用いるquery文を定義しています。

今回は、employeeテーブルに対してidで検索をかけています。

 

ちなみに、FROMとWHEREの前(もしくは*とemployeeのあと)には半角スペースが必須です。

これがないと「employeeとwhere」や「*とFROM」が一続きの単語として扱われるので、クエリの対象がemployeeWHEREテーブルという実際には存在しないテーブルになります。

Map<String, Object> employee = jdbcTemplate.queryForMap(query, id);

インスタンスメソッドの引数として与えたidと上記のquery文をもとにemployeeインスタンスを検索し、employeeという変数に代入しています。

queryForMapはJdbcTemplateクラスのインスタンスメソッドの一つで、Mapを取得するためのものです。

取得したいものによって、queryForList, queryForObjectなどの様々なメソッドがあります。

まとめ

以上がSprig BootにおけるRepository関連の取り扱いになります。