SpringでMySQLを利用してみる（Part 1: プロジェクトの作成） 

最近Springの学習を始め、ようやくデータベースの接続に成功したので、作成したプロジェクトを共有したいと思います。データベースに接続する方法としては、Spring Data JPAを利用する方法とSpring JDBCを利用する方法がありますが、ここではSpring Data JPAを利用します。

参考リンク：
https://spring.io/guides/gs/accessing-data-mysql/
https://spring.io/guides/gs/accessing-data-jpa/
https://tech.pjin.jp/blog/2016/05/30/springframework5/

##プロジェクト紹介

このプロジェクトでは、フォームに入力されたユーザの名前とメールアドレスをデータベースに登録します。ホーム画面で、データを入力してAddボタンを押すと…

![home.png](https://qiita-image-store.s3.amazonaws.com/0/326104/5979b7ea-0488-4143-f323-e9df042c35e1.png)

![saved.png](https://qiita-image-store.s3.amazonaws.com/0/326104/2f441904-f6fa-6e98-c9ce-877634bf6305.png)


データが保存されます。ホーム画面に戻り、一覧を表示をクリックすることで、データベースに登録されているユーザの一覧を表示することもできます。

![all.png](https://qiita-image-store.s3.amazonaws.com/0/326104/eb3ca8b0-3962-a2ae-a9c0-47f4ab8a7785.png)


このパート１では、プロジェクトの作成・設定について投稿したいと思います。


##プロジェクトの作成
使用したIDEはEclipse。まず、新規Maven Projectを作成します。maven-archetype-archetypeを選択し、任意のGroup ID, Artifact ID, Package名を指定します。また、データベースも作成しておきます。ここではデータベース名をspring_sampleとします。

##フォルダー構造
プロジェクトの構造は以下の通りです。
![directory.png](https://qiita-image-store.s3.amazonaws.com/0/326104/7de78046-c641-1f65-1c82-722969046942.png)

まずapplication.propertiesを作成し、以下の内容を追加します。

application.properties

```properties

spring.mvc.view.prefix: /WEB-INF/jsp/
spring.mvc.view.suffix: .jsp

spring.jpa.hibernate.ddl-auto=create
spring.datasource.url=jdbc:mysql://localhost:3306/spring_sample
spring.datasource.username=root
spring.datasource.password=
```
初めてプロジェクトを実行する場合はデータベース（テーブル）を作成する必要があるので、ddl-autoをcreateに設定します。二回目以降はすでに作成されているので、ddl-autoをnoneに設定し、データが削除されないようにします。

```properties

spring.jpa.hibernate.ddl-auto=none
```

次にpom.xmlを編集し、以下のようにdependencyを追加します。

pom.xml

```xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>gs-mysql-example</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>Archetype - gs-mysql-example</name>
  <url>http://maven.apache.org</url>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.5.RELEASE</version>
  </parent>

  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>org.apache.tomcat.embed</groupId>
      <artifactId>tomcat-embed-jasper</artifactId>
      <scope>provided</scope>
    </dependency>

    <!-- JPA Data (We are going to use Repositories, Entities, Hibernate, 
      etc...) -->

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    
    <dependency>
      <groupId>org.hibernate.javax.persistence</groupId>
      <artifactId>hibernate-jpa-2.1-api</artifactId>
    </dependency>

    <!-- Use MySQL Connector-J -->

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
    
    <!-- Spring Form -->
    
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-taglibs</artifactId>
    </dependency>
  </dependencies>

  <properties>
    <java.version>1.8</java.version>
  </properties>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
</project>
```
これでプロジェクトのセットアップは完了です。[次回](https://qiita.com/shoko93/items/39737cf79792d23d8d1e)はデータを保持するためのクラスを作成していきます。