この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:3
ページ更新者:T
更新日時:2019-01-31 09:31:25

タイトル: DB接続設定からエンティティおよびリポジトリの作成、値の取得まで(JPA編)
SEOタイトル: 【Spring Boot (JPA編)】DB接続設定からエンティティおよびリポジトリの作成、値の取得まで

本稿ではSpring FrameworkにおけるJPAを使用したDBの作成~値の取得まで一通りを説明します。

 

前提

・Spring Bootを使用

・mavenを使用

・DBはMySQLを使用(適宜読み替えられれば他のDBでも可能)

 

DBの作成

今回の例ではMySQLを用意します。

Windowsの場合、MySQLを単独でインストールすると色々と設定がめんどくさいので、今回はXAMPPのMySQLを使用します。XAMPPのインストールはこちらを参照。

MySQLにデータベースおよびテーブルを作成しましょう。以下のコマンドを実行します。

CREATE DATABASE spring_db CHARACTER SET utf8 COLLATE utf8_bin;

GRANT ALL PRIVILEGES
ON spring_db.*
TO spring_user@localhost
IDENTIFIED BY 'spring_password';

 

テスト用のテーブルを作成

以下のコマンドを実行してテスト用のテーブルを作成しましょう。

CREATE TABLE `user`(
id bigint(20),
name VARCHAR(50) NOT NULL
);

ALTER TABLE `user` ADD PRIMARY KEY (`id`);

ALTER TABLE `user` MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1;

INSERT INTO user (name)VALUES('tarou'),('jirou');

 

pom.xmlの修正

必要なライブラリをpom.xmlに記載します。

dependenciesに以下の項目を追加しましょう。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

 

DB接続設定

src/maim/resources」の「application.properties」に以下の内容を追記しましょう。

spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/spring_db
spring.datasource.username=spring_user
spring.datasource.password=spring_password
spring.jpa.database=MYSQL

 

エンティティクラスの作成

Java側のデータ保持用のエンティティクラスを作成します。

分かりやすいようにentity用のパッケージを作成しておきましょう。

テーブル定義に沿って以下の様に定義しましょう。

package com.example.demo.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="user")
public class User {
    
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    
@Column
    private long id;
    
    
@Column(length=50, nullable = false)
    private String name;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

 

リポジトリインターフェースの作成

DB操作の処理をリポジトリインターフェースで定義します。

分かりやすいようにrepository用のパッケージを作成しておきましょう。

以下、リポジトリインターフェースの定義例となります。

package com.example.demo.repository;

import com.example.demo.entity.User;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends JpaRepository<User, Long>{
}

JpaRepositoryのジェネリクスの第二引数にはUserエンティティの主キーの型を指定します。

 

テーブルから値の取得

それでは実際にテーブルから値を取得してみましょう。

適当な以下のようなコントローラーを作成して、リポジトリ経由でデータを取得してみます。

userテーブルからuser情報を取得する処理を記載してみましょう。

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.example.demo.entity.User;
import com.example.demo.repository.UserRepository;

@SpringBootApplication
@RestController

public class DemoJpaMysqlApplication {
    

    @Autowired
    UserRepository userRepository;

    @RequestMapping("/")
    String hello() {
        
Iterable<User> users = userRepository.findAll();
        
        for (User user : (Iterable<User>) users::iterator) {
            System.out.println(user.getName());
        }

        return "";
    }
    
    public static void main(String[] args) {
        SpringApplication.run(DemoJpaMysqlApplication.class, args);
    }

}

 

出力結果は以下の通りです。

tarou
jirou