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関連の取り扱いになります。