Spring 5でできることは?4からの変更点や互換性について解説
この記事は「Javaで学習するSpringによるWebアプリ開発」というトレノキャンプのeラーニング講座を基に解説した記事です。
本記事では、Springの学習前に押さえておきたいJavaの基本文法の中でも、最も重要なオブジェクト指向の基本を確認していきましょう。
今回は特に「Entity」について、解説・実装を行います。
1.オブジェクト(Entity)の構成
まずは、オブジェクトの構成について簡単におさらいしましょう。
今回作るのは、Entityと呼ばれるクラスです。
「Entity」とは、データベースのテーブル構造を表したオブジェクトだと考えてください。
データベースの1行を1インスタンスと対応させるためのクラスが「Entityクラス」となります。
上記のコードを読んでいくと、まずprivate intの「id」、Stringの「name」、そしてStringの「email」とあり、この部分をフィールド、またはメンバ変数といいました。
さらに、その下にはコンストラクタ、ゲッターおよびセッターといったメソッドを用意しています。
このようなクラスのことを、ごく普通のJavaオブジェクトという意味で「POJO(Plain Old Java Object)クラス」と呼びますので、覚えておきましょう。
2.Entityへの変換
それではEntityクラスについてもう少し詳しく見ていきましょう。
先程、Entityクラスのイメージとして「データベースの1行を1インスタンスに」という表し方をしましたが、今回は「Member」という名前のEntityクラスを作っていきます。クラスの内容については、さきほど確認した通りとなっています。
図の右側にある円柱の部分がデータベースで、ここにいろいろなデータが入っているというイメージです。
データベースから取得したデータは、取り出した段階ではMap型になっていることが多いため、作成したEntityクラスのインスタンスへデータを詰め替える作業が必要となります。
このように、データは取り出した状態のまま使うものではなく、データの内容に沿った概念を持つオブジェクト、ここでは人という概念を持った「Member」オブジェクトがあり、データはそれに付随するものである、というイメージが重要となります。
そのため、この「詰め替える作業が必要になる」ということを覚えておいてください。
今回は、Memberのクラスに「id」が1のリンダさん、2のジェームスさんなどをデータとして詰めていきますが、それによってレコードに対応したインスタンスがポンと生まれる、といったイメージを持っていただければと思います。
それでは一旦、ここまでの部分を実装してみましょう。
3. Entityクラスの実装
ここからは実際にコードを記述していきますので、ぜひ皆さんも一緒に手を動かしながら進めていきましょう。
この記事では、実装に統合開発環境のEclipse 2019を使用します。
環境構築の手順は下記の記事でも解説しています。興味のある方は下記のリンクからご覧ください。
① Javaプロジェクトの生成
では、Eclipseを開いてください。
今回新しくプロジェクトから作っていきますので、ツールバー左上の「ファイル」から、「新規」の「Java プロジェクト」を選択してください。
プロジェクト名は「Review」とします。プロジェクト名の頭文字は大文字にします。
入力できたら、そのまま「完了」を選択してください。
続いてのウィンドウでは、何も変更せずに「作成」を押してください。
これで新規のJavaプロジェクトが作成できました。
② Entityクラスの作成
次に、ソースの中にパッケージを作っていきます。
Reviewプロジェクト内の「src」フォルダの上で右クリックして、「新規」の「パッケージ」を選択してください。
種類としてはEntityクラスを作っていきますので、名前は「entity」と入力します。
入力ができたら、「ソース・フォルダー」の欄が「Review/src」となっていることを確認してから、完了を押してください。
それでは、このパッケージの中にEntityクラスを作っていきましょう。
パッケージ「entity」の上で右クリックをして、「新規」から今度は「クラス」を選んでください。
名前は、今回作っていく「Member」とします。クラス名も頭文字が大文字になりますので、注意してください。
ほかの設定はそのまま、デフォルトのものを使っていきますので、完了を押します。
これで、クラスができあがりました。
packageが「entity」の、「public class Member」というクラスになっています。
ではそれぞれ、まずはフィールドから書いていきましょう。なお、コメント部分は記述しなくても動作します。
package entity;
public class Member {
private int id; //識別子
private String name; //名前
private String email; //メールアドレス
}
まずprivateのint型「id」というものが必要でした。次に、private Stringの「name」、名前になります。そして最後が同じくprivate Stringの「email」、メールアドレスです。
ここまでの部分を「フィールド」と言いました。
なお、こちらすべてのフィールドのアクセスレベルをprivateにしたので、外部から直接アクセスすることはできなくなっています。
③ コンストラクタの生成
では次に、コンストラクタも用意しておきましょう。
public Member() {} //デフォルトコンストラクタ
まず、アクセス修飾子「public」と記述し、クラス名の「Member」、そして「(){}」を付けます。
こちらが「デフォルトコンストラクタ」となります。このように書くだけで、「id」には0、「name」と「email」にはnullという初期値がそれぞれ自動的に代入されます。
続いて、各フィールドを初期化するコンストラクタや、ゲッター、セッターを作成しますが、それらはコツコツ書かなくても、IDEの自動生成機能を用いることで数クリックのうちに記述できますので、今後はこちらを積極的に活用していきます。
それでは、ツールバーの「ソース」というところから選択していきます。
「ソース」をクリックし、その中の「フィールドを使用してコンストラクターを生成」という項目を選択します。
「id」、「name」、「email」と、すでにすべての項目にチェックが付いていますが、必要に応じてチェックを外すなどして、初期化したいフィールドに応じた引数を持つコンストラクタを簡単に作成できます。
今回はすべて必要なので、チェックをつけたままにして、「生成」を押します。
これで自動的にコンストラクタが生成されますが、ブロック内先頭の「super();」という部分は不要ですので、削除しておいてください。
④ ゲッター・セッターの生成
では次にゲッター、セッターを用意していきます。
さきほどと同様、ツールバーの「ソース」から、今度は「getterおよびsetterの生成」という項目を選択してください。
こちらも全部用意していきますので、全てのフィールドにチェックを入れておいてください。
もしセッター、あるいはゲッターのどちらか片方のみを生成したい場合は、チェックボックスの左側にある山かっこをクリックすると中身が展開され、それぞれゲッター、セッター別々にチェックを入れることができます。
それでは、すべてチェックを入れたら「生成」を押します。
以上で必要なコードが生成され、全体はこのような状態になります。
Member.java
package entity;
public class Member {
private int id; //識別子
private String name; //名前
private String email; //メールアドレス
public Member() {} //デフォルトコンストラクタ
public Member(int id, String name, String email) {
this.id = id;
this.name = name;
this.email = email;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
それでは、コードの記述が完了しましたので、ここまでのポイントをおさらいしましょう。
まず、クラスのはじめの部分に「フィールド」が定義され、その下に「コンストラクタ」があります。
引数なしでコンストラクタを呼び出した場合は、すべてのフィールドが初期値で初期化されたインスタンスが返され、引数を3つ入れた場合は、その値でフィールドを初期化したインスタンスが返されます。
さらにその下には、典型的な「ゲッター」と「セッター」が記述されています。
ここまで確認できたら、「Ctrl + S」のショートカットを使って内容を保存しましょう。
以上でEntityクラスが完成しました。
次の記事では、こちらのEntityクラスを使う「Serviceクラス」について解説し、実装していきます。
第1章 Springを扱うためのJava知識
Springを学ぶ前に知っておくべきJavaの知識について紹介します。
オブジェクト(Entity)の構成や、Entityクラスの実装方法を学びましょう。
Serviceクラス、インターフェースがどんなものなのか、またその実装方法を見てみましょう。
Javaのメモリ「ヒープ領域」と「スタック領域」についても解説します。
メソッドと引数について、問題に取り組みながら学びます。
作成したインターフェースとServiceクラスを使用して、メソッドの追加を行ってみましょう。
「シングルトン」とは何なのか、インスタンスの化の仕組みについて掘り下げながら紹介します。
実装方法も確認しましょう。