apeescape2.com
  • メイン
  • アジャイル
  • Webフロントエンド
  • 計画と予測
  • 設計プロセス
Webフロントエンド

Spring Frameworkを使用したMVCアプリケーションの構築:初心者向けチュートリアル

Javaは、単純なアプリケーションを構築するには複雑すぎて時間がかかりすぎるとよく言われます。それにもかかわらず、Javaは、その周りに非常に成熟したエコシステムを備えた安定したプラットフォームを提供します。これにより、Javaは堅牢なソフトウェアを開発するための素晴らしいオプションになります。

Spring Frameworkは、の多くの強力なフレームワークの1つです。 Java エコシステムには、Javaでのパフォーマンスが高くテスト可能なアプリケーションの開発を簡素化することを目的としたプログラミングおよび構成モデルのコレクションが付属しています。

t9キーボードとは何ですか

SpringFramework



このチュートリアルでは、データベースとして機能する単純なアプリケーションの構築に挑戦します。 ソフトウェア開発者 SpringFrameworkとJavaPersistence API(JPA)を使用します。

アプリケーションは、標準のMVCアーキテクチャに従います。これには、コントローラー(ContractsControllerクラス)、ビュー(Thymeleafテンプレートに基づく)、およびモデル(Javaマップオブジェクト)が含まれます。簡単にするために、JPAの背後にあるメモリ内データベースを使用して、アプリケーションの実行中にデータを永続化します。

SpringFrameworkチュートリアル入門

Springベースのアプリケーションをビルドするには、次のビルドツールのいずれかを使用する必要があります。

  • Maven
  • Gradle

このチュートリアルでは、Mavenを使用します。これらのツールのいずれにも慣れていない場合は、簡単に開始する方法は、 Spring Tool Suite 。このスイートはSpringFramework専用であり、独自のスイートが付属しています Eclipse ベースのIDE。

Spring Tool Suiteでは、「ファイル」>「新規」メニューから「SpringStarterProject」を選択して新しいプロジェクトを作成します。

SpringFrameworkチュートリアル

新しいプロジェクトが作成されたら、Maven構成ファイルを編集する必要があります。 pom.xml 」、および次の依存関係を追加します。

org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-thymeleaf org.springframework.boot spring-boot-starter-data-jpa com.h2database h2 org.springframework.data spring-data-commons

これらのリストされた依存関係は、Spring Boot Web、Thymeleaf、JPA、およびH2(インメモリデータベースとして機能します)をロードします。必要なすべてのライブラリが自動的にプルされます。

エンティティクラス

開発者とそのスキルに関する情報を保存できるようにするには、2つのエンティティクラスを定義する必要があります。 開発者 」と「 スキル 」。

これらは両方とも、いくつかのアノテーションが付いたプレーンJavaクラスとして定義されています。クラスの前に「@Entity」を追加することで、それらのインスタンスをJPAで使用できるようにします。これにより、必要に応じて永続データストアからインスタンスを簡単に保存および取得できるようになります。さらに、「@ Id」および「@GeneratedValue」アノテーションを使用すると、エンティティの一意のIDフィールドを示し、データベースに保存されたときにその値が自動的に生成されます。

開発者は多くのスキルを持つことができるため、「@ ManyToMany」アノテーションを使用して単純な多対多の関係を定義できます。

開発者

@Entity public class Developer { @Id @GeneratedValue(strategy=GenerationType.AUTO) private long id; private String firstName; private String lastName; private String email; @ManyToMany private List skills; public Developer() { super(); } public Developer(String firstName, String lastName, String email, List skills) { super(); this.firstName = firstName; this.lastName = lastName; this.email = email; this.skills = skills; } public long getId() { return id; } public void setId(long id) { this.id = id; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public List getSkills() { return skills; } public void setSkills(List skills) { this.skills = skills; } public boolean hasSkill(Skill skill) { for (Skill containedSkill: getSkills()) { if (containedSkill.getId() == skill.getId()) { return true; } } return false; } }

スキル

@Entity public class Skill { @Id @GeneratedValue(strategy=GenerationType.AUTO) private long id; private String label; private String description; public Skill() { super(); } public Skill(String label, String description) { super(); this.label = label; this.description = description; } public long getId() { return id; } public void setId(long id) { this.id = id; } public String getLabel() { return label; } public void setLabel(String label) { this.label = label; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } }

リポジトリ

JPAを使用すると、非常に便利なDeveloperRepositoryインターフェースとSkillRepositoryインターフェースを定義できます。これにより、CRUD操作が簡単になります。これらのインターフェースにより、次のような単純なメソッド呼び出しを通じて、保存されている開発者とスキルにアクセスできます。

  • 「respository.findAll()」:すべての開発者を返します
  • 「repository.findOne(id)」:指定されたIDの開発者を返します

これらのインターフェースを作成するには、CrudRepositoryインターフェースを拡張するだけです。

開発者リポジトリ

public interface DeveloperRepository extends CrudRepository { }

スキルリポジトリ

public interface SkillRepository extends CrudRepository { public List findByLabel(String label); }

追加メソッドの機能「 findByLabel 「ここで宣言されたものは、JPAによって自動的に提供されます。

コントローラ

次に、このアプリケーションのコントローラーで作業できます。コントローラはリクエストURIをマップしてテンプレートを表示し、その間に必要なすべての処理を実行します。

@Controller public class DevelopersController { @Autowired DeveloperRepository repository; @Autowired SkillRepository skillRepository; @RequestMapping('/developer/{id}') public String developer(@PathVariable Long id, Model model) { model.addAttribute('developer', repository.findOne(id)); model.addAttribute('skills', skillRepository.findAll()); return 'developer'; } @RequestMapping(value='/developers',method=RequestMethod.GET) public String developersList(Model model) { model.addAttribute('developers', repository.findAll()); return 'developers'; } @RequestMapping(value='/developers',method=RequestMethod.POST) public String developersAdd(@RequestParam String email, @RequestParam String firstName, @RequestParam String lastName, Model model) { Developer newDeveloper = new Developer(); newDeveloper.setEmail(email); newDeveloper.setFirstName(firstName); newDeveloper.setLastName(lastName); repository.save(newDeveloper); model.addAttribute('developer', newDeveloper); model.addAttribute('skills', skillRepository.findAll()); return 'redirect:/developer/' + newDeveloper.getId(); } @RequestMapping(value='/developer/{id}/skills', method=RequestMethod.POST) public String developersAddSkill(@PathVariable Long id, @RequestParam Long skillId, Model model) { Skill skill = skillRepository.findOne(skillId); Developer developer = repository.findOne(id); if (developer != null) { if (!developer.hasSkill(skill)) { developer.getSkills().add(skill); } repository.save(developer); model.addAttribute('developer', repository.findOne(id)); model.addAttribute('skills', skillRepository.findAll()); return 'redirect:/developer/' + developer.getId(); } model.addAttribute('developers', repository.findAll()); return 'redirect:/developers'; } }

URIのメソッドへのマッピングは、単純な「@RequestMapping」アノテーションを介して行われます。この場合、コントローラーのすべてのメソッドがURIにマップされます。

Twitterデータを分析する方法

これらのメソッドのモデルパラメータを使用すると、データをビューに渡すことができます。本質的に、これらはキーから値への単純なマップです。

各コントローラーメソッドは、ビューとして使用されるThymeleafテンプレートの名前、またはリダイレクト先の特定のパターンのURL(「リダイレクト:」)のいずれかを返します。たとえば、メソッド「developer」と「_developersList_」はテンプレートの名前を返し、「developersAdd」と「developersAddSkill」はリダイレクト先のURLを返します。

コントローラ内で、「@ Autowired」アノテーションは、対応するフィールドに定義されたリポジトリの有効なインスタンスを自動的に割り当てます。これにより、多くの定型コードを処理しなくても、コントローラー内から関連データにアクセスできます。

ビュー

最後に、生成するビューのテンプレートをいくつか定義する必要があります。このために、単純なテンプレートエンジンであるThymeleafを使用しています。コントローラメソッドで使用したモデルは、テンプレート内で直接利用できます。つまり、「 契約する モデルの「」キーを押すと、テンプレート内から「contract.name」として名前フィールドにアクセスできるようになります。

Thymeleafには、HTMLの生成を制御するいくつかの特別な要素と属性が含まれています。それらは非常に直感的で簡単です。たとえば、スパン要素のコンテンツにスキルの名前を入力するには、次の属性を定義するだけです(キー「 スキル 」はモデルで定義されています):

同様に「 href 」アンカー要素の属性、特別な属性「 th:href ' に使える。

このアプリケーションでは、2つの単純なテンプレートが必要になります。わかりやすくするために、ここでは埋め込みテンプレートコードですべてのスタイル属性とクラス属性(つまり、ブートストラップ属性)をスキップします。

開発者リスト

Developers database Name:
Email:
Skills:
- Skill

サーバーの実行

Springにはブートモジュールが含まれています。これにより、コマンドラインからサーバーをコマンドラインJavaアプリケーションとして簡単に起動できます。

@SpringBootApplication public class Application implements CommandLineRunner { @Autowired DeveloperRepository developerRepository; @Autowired SkillRepository skillRepository; public static void main(String[] args) { SpringApplication.run(Application.class, args); } }

インメモリデータベースを使用しているため、起動時に事前定義されたデータを使用してデータベースをブートストラップすることは理にかなっています。そうすれば、サーバーが稼働しているときに、データベースに少なくともいくつかのデータがあります。

@Override public void run(String... args) throws Exception { Skill javascript = new Skill('javascript', 'Javascript language skill'); Skill ruby = new Skill('ruby', 'Ruby language skill'); Skill emberjs = new Skill('emberjs', 'Emberjs framework'); Skill angularjs = new Skill('angularjs', 'Angularjs framework'); skillRepository.save(javascript); skillRepository.save(ruby); skillRepository.save(emberjs); skillRepository.save(angularjs); List developers = new LinkedList(); developers.add(new Developer('John', 'Smith', ' [email protected] ', Arrays.asList(new Skill[] { javascript, ruby }))); developers.add(new Developer('Mark', 'Johnson', ' [email protected] ', Arrays.asList(new Skill[] { emberjs, ruby }))); developers.add(new Developer('Michael', 'Williams', ' [email protected] ', Arrays.asList(new Skill[] { angularjs, ruby }))); developers.add(new Developer('Fred', 'Miller', ' [email protected] ', Arrays.asList(new Skill[] { emberjs, angularjs, javascript }))); developers.add(new Developer('Bob', 'Brown', ' [email protected] ', Arrays.asList(new Skill[] { emberjs }))); developerRepository.save(developers); }

結論

Springは、MVCアプリケーションの構築を可能にする多用途のフレームワークです。 Springを使用して単純なアプリケーションを構築するのは迅速で透過的です。このアプリケーションは、JPAを使用してデータベースと簡単に統合することもできます。

このプロジェクト全体のソースコードは GitHubで入手可能 。

デザイナーのための効果的なコミュニケーション戦略

設計プロセス

デザイナーのための効果的なコミュニケーション戦略
ツリーカーネル:ツリー構造化データ間の類似性の定量化

ツリーカーネル:ツリー構造化データ間の類似性の定量化

データサイエンスとデータベース

人気の投稿
SMACSSの探索:CSSのスケーラブルでモジュラーなアーキテクチャ
SMACSSの探索:CSSのスケーラブルでモジュラーなアーキテクチャ
ApeeScapeは、スタートアップ起業家に低コストでエリートプログラミングの才能を提供します
ApeeScapeは、スタートアップ起業家に低コストでエリートプログラミングの才能を提供します
Facebookを再設計しましょう:あなたが始めるのを刺激し、助けるための10の例
Facebookを再設計しましょう:あなたが始めるのを刺激し、助けるための10の例
WordPressプラグインを構築するための究極のガイド
WordPressプラグインを構築するための究極のガイド
Redux状態管理によるトップレベルの制御:ClojureScriptチュートリアル
Redux状態管理によるトップレベルの制御:ClojureScriptチュートリアル
 
宿題をする:AWS認定ソリューションアーキテクト試験の7つのヒント
宿題をする:AWS認定ソリューションアーキテクト試験の7つのヒント
収益の質:財務デューデリジェンスの重要な柱
収益の質:財務デューデリジェンスの重要な柱
コードの最適化:最適化するための最適な方法
コードの最適化:最適化するための最適な方法
Google BigQueryを使用する意味があるのはいつですか?
Google BigQueryを使用する意味があるのはいつですか?
商用ドローンは事業運営に革命をもたらしています
商用ドローンは事業運営に革命をもたらしています
人気の投稿
  • ユーザー数によるアプリのデート
  • 転換社債と転換社債
  • ファンドオブファンズの不動産ファンド
  • アートのデザインの原則は何ですか
  • C言語を学ぶ方法
カテゴリー
データサイエンスとデータベース 製品の担当者とチーム Uiデザイン 技術 モバイル 革新 仕事の未来 その他 財務プロセス プロセスとツール

© 2021 | 全著作権所有

apeescape2.com