構築できる最も単純なものから始めましょう。実際、できるだけ簡単にするために、RESTの概念を省略することもできます。(後で、2つの違いを理解するためにRESTを追加します。)
この例では、管理会社の従業員向けの簡単な給与サービスをモデル化しています。つまり、従業員オブジェクトをH2インメモリデータベースに格納し、JPAを通じてそれらにアクセスする必要があります。これは、リモートアクセス用のSpring MVCレイヤーによってラップされます。
nonrest/src/main/java/payroll/Employee.java
package payroll;
import lombok.Data;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Data
@Entity
class Employee {
private @Id @GeneratedValue Long id;
private String name;
private String role;
Employee() {}
Employee(String name, String role) {
this.name = name;
this.role = role;
}
}
小さいですが、このJavaクラスには多くのものが含まれています。
@Data
ロンボク注釈は、すべてのフィールドのゲッター、セッター、に基づいて、プラグインに使用されequals
、hash
そしてtoString
方法。@Entity
これは、オブジェクトをJPAベースのデータストレージ領域に格納できるようにするためのJPAアノテーションです。id
、name
そしてrole
、より多くのJPAのアノテーションが自動フィルJPAプロバイダによって、それが主キーであることを示すためにラベル付けされる最初の属性ドメインのオブジェクトです。- 新しいインスタンスを作成する必要があるが、まだIDがない場合は、カスタムコンストラクターを作成します。
このドメインオブジェクト定義を使用して、面倒なデータベースの相互作用を処理するためにSpring Data JPAを利用できるようになりました。Spring Dataリポジトリは、バックエンドデータストレージのレコードの読み取り、更新、削除、および作成をサポートするメソッドとのインターフェースです。必要に応じて、一部のリポジトリはデータのページングとソートもサポートします。Spring Dataは、インターフェースのメソッドの命名規則にある規則に従って包括的に実装されています。
JPAに加えて、複数のリポジトリー実装があります。Spring Data MongoDB、Spring Data GemFire、Spring Data Cassandraなどを使用できます。このチュートリアルでは、常にJPAを使用します。
nonrest/src/main/java/payroll/EmployeeRepository.java
package payroll;
import org.springframework.data.jpa.repository.JpaRepository;
interface EmployeeRepository extends JpaRepository<Employee, Long> {
}
インターフェースは、春データJPA延びJpaRepository
フィールドに指定されたタイプは、Employee
タイプおよびIDとして指定されていますLong
。インターフェースは表面上は空ですが、それをサポートしている限り、パッケージ化します。
- 新しいインスタンスを作成します。
- 既存のものを更新
- 削除しています
- 検索(1つ、すべて、単純または複雑な属性を通じて)
Spring Dataのリポジトリソリューションでは、データストレージの詳細を回避でき、ドメイン固有の用語を使用してほとんどの問題を解決できます。
信じられないかもしれませんが、これでアプリを起動できます!春ブートアプリケーションは、少なくとも一つであるpublic static void main
エントリーポイントと@SpringBootApplication
注釈。これは、Spring Bootに可能な限り支援するように指示します。
nonrest/src/main/java/payroll/PayrollApplication.java
package payroll;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class PayrollApplication {
public static void main(String... args) {
SpringApplication.run(PayrollApplication.class, args);
}
}
@SpringBootApplication
これは、コンポーネントのスキャン、自動構成、および属性のサポートを導入できるメタ注釈です。このチュートリアルでは、Spring Bootの詳細については説明しませんが、本質的にはサーブレットコンテナーを起動してサービスを提供します。
ただし、データのないアプリケーションはあまり面白くないので、プリロードしてみましょう。後続のクラスは、Springの前に自動的にロードされます。
nonrest/src/main/java/payroll/LoadDatabase.java
package payroll;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.CommandLineRunner;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@Slf4j
class LoadDatabase {
@Bean
CommandLineRunner initDatabase(EmployeeRepository repository) {
return args -> {
log.info("Preloading " + repository.save(new Employee("Bilbo Baggins", "burglar")));
log.info("Preloading " + repository.save(new Employee("Frodo Baggins", "thief")));
};
}
}
ロード後はどうなりますか?
- アプリケーションコンテキストがホームにあるならば、春ブーツは、すべての実行される
CommandLineRunner
豆のを。 - ランは、先ほど作成したことを要求します
EmployeeRepository
コピーを。 - それを使用して、2つのエンティティを作成して格納します。
@Slf4j
ロンボク島の注釈は自動的に基礎SLF4J作成するために使用されるLoggerFactory
ようにlog
、我々はこれらの新しく作成された記録できるように、「従業員を。」
右クリックして実行すると PayRollApplication
、次のようになります。
データのプリロードを示す、コンソールによって出力されたフラグメント
...
2018-08-09 11:36:26.169 INFO 74611 --- [main] payroll.LoadDatabase : Preloading Employee(id=1, name=Bilbo Baggins, role=burglar)
2018-08-09 11:36:26.174 INFO 74611 --- [main] payroll.LoadDatabase : Preloading Employee(id=2, name=Frodo Baggins, role=thief)
...
これは完全なログではなく、プリロードされたデータの重要な部分のみです。(本当に、コンソール全体を確認してください。これは素晴らしいです。)