Javaは、単純なアプリケーションを構築するには複雑すぎて時間がかかりすぎるとよく言われます。それにもかかわらず、Javaは、その周りに非常に成熟したエコシステムを備えた安定したプラットフォームを提供します。これにより、Javaは堅牢なソフトウェアを開発するための素晴らしいオプションになります。
Spring Frameworkは、の多くの強力なフレームワークの1つです。 Java エコシステムには、Javaでのパフォーマンスが高くテスト可能なアプリケーションの開発を簡素化することを目的としたプログラミングおよび構成モデルのコレクションが付属しています。
t9キーボードとは何ですか
このチュートリアルでは、データベースとして機能する単純なアプリケーションの構築に挑戦します。 ソフトウェア開発者 SpringFrameworkとJavaPersistence API(JPA)を使用します。
アプリケーションは、標準のMVCアーキテクチャに従います。これには、コントローラー(ContractsControllerクラス)、ビュー(Thymeleafテンプレートに基づく)、およびモデル(Javaマップオブジェクト)が含まれます。簡単にするために、JPAの背後にあるメモリ内データベースを使用して、アプリケーションの実行中にデータを永続化します。
Springベースのアプリケーションをビルドするには、次のビルドツールのいずれかを使用する必要があります。
このチュートリアルでは、Mavenを使用します。これらのツールのいずれにも慣れていない場合は、簡単に開始する方法は、 Spring Tool Suite 。このスイートはSpringFramework専用であり、独自のスイートが付属しています Eclipse ベースのIDE。
Spring Tool Suiteでは、「ファイル」>「新規」メニューから「SpringStarterProject」を選択して新しいプロジェクトを作成します。
新しいプロジェクトが作成されたら、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操作が簡単になります。これらのインターフェースにより、次のような単純なメソッド呼び出しを通じて、保存されている開発者とスキルにアクセスできます。
これらのインターフェースを作成するには、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で入手可能 。