SpringBootでデータベースにアクセスしてみます

jpaを使うために、以下の作業を行います

・application.propertiesにDB接続のための設定を行う
・Entity, Repositoryというクラスを作成する

1.構成

sample-jpa
│  build.gradle
└─src
    └─main
        ├─java
        │  └─com
        │      └─jpasample
        │              Employee.java
        │              EmployeeRepository.java
        │              HeloController.java
        │              SamplePrj004JpaApplication.java
        │              ServletInitializer.java
        └─resources
            │  application.properties
            ├─static
            └─templates
                    index.html

2.DB接続情報の設定
application.propertiesに以下のように設定します

application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/sampledb
spring.datasource.username=testuser
spring.datasource.password=testuser
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.jpa.database=MYSQL
spring.jpa.hibernate.ddl-auto=update

spring.jpa.hibernate.ddl-auto=updateとしておくと、
DBにテーブルが定義されていなくてもテーブルが作成されます。

3.依存関係

build.gradle
dependencies {
    compile('org.springframework.boot:spring-boot-starter-data-jpa')
    compile('org.springframework.boot:spring-boot-starter-thymeleaf')
    compile('org.springframework.boot:spring-boot-starter-web')
    runtime('org.springframework.boot:spring-boot-devtools')
    runtime('mysql:mysql-connector-java')
    compileOnly('org.projectlombok:lombok')
    providedRuntime('org.springframework.boot:spring-boot-starter-tomcat')
    testCompile('org.springframework.boot:spring-boot-starter-test')
}

4.データベースにテーブルを定義する。

従業員マスタを検索するサンプルとしています。

CREATE TABLE `m_emp` (
  `empno` bigint(20) NOT NULL AUTO_INCREMENT,
  `empname` varchar(255) DEFAULT NULL,
  `departmentid` varchar(10) DEFAULT NULL,
  PRIMARY KEY (`empno`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8

insert into sampledb.m_emp
(empname,departmentid)
values
('従業員A','10101001')
,('従業員B','10101001')
,('従業員C','10101002')
,('従業員D','10101003')

5.Entityクラスを作成する

Employee.java
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="m_emp")
public class Employee {
    @Id
    @Column(name="empno")
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;
    private String empname;
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getEmpname() {
        return empname;
    }
    public void setEmpname(String empname) {
        this.empname = empname;
    }
}

6.Repository

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

@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Long> {}

7.Controller

従業員マスタを全件検索しています。

import java.util.List;

import javax.transaction.Transactional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class HeloController {
    @Autowired
    EmployeeRepository empRepository;
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String index(Model model) {
        List<Employee> emplist=empRepository.findAll();
        model.addAttribute("emplist", emplist);
        return "index";
    }
}

8.html

index.html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
    <head>
        <title>Springboot</title>
        <meta charset="utf-8" />
    </head>
    <body>
        <h1 th:text="${title}"></h1>
        <table>
            <tr th:each="emp : ${emplist}" th:object="${emp}">
                <td th:text="*{id}"></td>
                <td th:text="*{empname}"></td>
            </tr>
        </table>
    </body>
</html>

9.Springbootを実行してURLにアクセスしてみます。
http://localhost:8080/

image.png

無事表示されました。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.