2018年12月
S M T W T F S
« Nov    
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

このブログ内を検索

アーカイブ

ATOM RSS2.0
<<>>

2018.12.01

01 仕事

spring bootを使ってみた その2

こんにちは。人材育成担当YNです。

先日「spring bootを使ってみた その1」でWebページのサンプルを作成しました。
続きとしてDBとの連携をやってみましょう。

DBにテーブルを用意します。今回はpostgreSQLを使います。employeeテーブルを作成しました。
データも入れておきましょう。いつもの太郎さんと花子さんです。

CREATE TABLE public.employee
(
    id integer NOT NULL,
    employee_code character varying NOT NULL,
    first_name character varying,
    last_name character varying,
    email character varying,
    CONSTRAINT employee_pkey PRIMARY KEY (id)
);
INSERT INTO public.employee(
	id, employee_code, first_name, last_name, email)
	VALUES (1, 'aaaa', '太郎', 'アルク',
	'taro.ark@ark-inc.co.jp');
INSERT INTO public.employee(
	id, employee_code, first_name, last_name, email)
	VALUES (2, 'bbbb', '花子', 'アルク',
	'hanako.ark@ark-inc.co.jp');

次はアプリケーションの設定です。

DBとの連携に必要なライブラリを追加します。

pom.xml
 <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-jpa</artifactId>
 </dependency>
 <dependency>
   <groupId>org.postgresql</groupId>
   <artifactId>postgresql</artifactId>
 </dependency>

アプリケーションからDBへアクセスするための情報を設定ファイルに記述します。
lob.non_contextual_creationは設定しなくても動作しますが、起動時に不要な例外が発生するのを抑止するために入れています。

application.yml
spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/postgres
    driver-class-name: org.postgresql.Driver
    username: postgres
    password: xxxxxxxxx
  jpa:
    properties:
      hibernate:
        jdbc:
          lob.non_contextual_creation: true

ここからはアプリケーションのコードを記述していきます。

DBのレコードに対応するエンティティクラスです。DBのテーブル名、カラム名とクラス、メンバー結び付けるアノテーション(@Table、@Column)を記述しています。
ID(@Idで指定するメンバー)とコントラクタが必須です。
ここではID値の生成にAUTOで指定しているので、PostgreSQLの場合はシーケンスを使って自動生成されます。
(今回のサンプルではINSERTは使わないのですが。)

Employee.java
@Entity
@Table(name="employee")
public class Employee {
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private int id;

	@Column(name="employee_code")
	private String employeeCode;

	@Column(name="first_name")
	private String firstName;

	@Column(name="last_name")
	private String lastName;

	@Column(name="email")
	private String email;

	protected Employee() {}

	public Employee(
		String employeeCode,
		String firstName,
		String lastName) {
		this.employeeCode = employeeCode;
		this.firstName = firstName;
		this.lastName = lastName;
	}
}

DBを操作するリポジトリクラスを作成します。CrudRepositoryインタフェースにより基本的なCRUD操作が利用できます。

EmployeeRepository.java
public interface EmployeeRepository
	extends CrudRepository<Employee, Integer> {
}

 

Employeeを取得するコントロールクラスを作成します。DBを扱う処理をサービスとして分離するほうがいい設計と思いますがサンプルなので直接リポジトリクラスを利用します。

EmployeeController.java
@Controller
public class EmployeeController {
    @Autowired
    EmployeeRepository repository;

    @RequestMapping(
    		value = {"/employee"},
    		method = {RequestMethod.GET})
    String showEmployee(Model model){

        // DBからデータ取得
        Iterable list = repository.findAll();
    	model.addAttribute("employees", list);

        return "show_employee";
    }
}

最後に表示するテンプレートです。

EmployeeController.java
<!doctype html>
<html xmlns:th="http://www.thymeleaf.org">
  <head>
    <meta charset="UTF-8" />
    <title>社員一覧</title>
  </head>
  <body>
    <table border="1">
      <tr>
        <th>社員コード</th>
        <th>姓</th>
        <th>名</th>
        <th>電子メール</th>
      </tr>
      <tr th:each="employee:${employees}">
        <td th:text="${employee.employeeCode}"></td>
        <td th:text="${employee.firstName}"></td>
        <td th:text="${employee.lastName}"></td>
        <td th:text="${employee.email}"></td>
      </tr>
    </table>
  </body>
</html>

これで完成です。前回同様にアプリケーションを起動したら、http://localhost:8080/employeeを表示してみましょう。

DBに登録しておいた情報が表示されました。簡単ですね。

このページの先頭へ