บทความที่ 5 แล้วสำหรับ Spring Boot แบบตั้งแต่พื้นฐาน
โดยวันนี้เราจะมาเริ่มเขียน Spring boot ติดต่อฐานข้อมูลกันบ้างโดยใช้ library spring-boot-starter-data-jpa ที่ทำให้การเขียนคำสั่งเพื่อใช้งาน JPA ทำได้โดยง่าย แทบไม่ต้อง config อะไรเลย
โดยเนื้อหาในวันนี้แบ่งเป็นดังนี้ครับ
เรามาเริ่มกันเลยครับ
เปิด project Spring Clinic ที่เราได้สร้างไว้แล้ว เปิด file build.gradle แก้ไขส่วนของ dependencies โดยเพิ่ม library spring-boot-starter-data-jpa และ mysql-connector-java เข้าไป
build.gradle ที่แก้ไขแล้วจะเป็นดังนี้ครับ
group 'com.codesanook.springclinic'
version '1.0-SNAPSHOT'
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.2.RELEASE")
}
}
apply plugin: 'java'
apply plugin: 'spring-boot'
sourceCompatibility = 1.7
repositories {
mavenCentral()
}
dependencies {
compile("org.springframework.boot:spring-boot-starter-web:1.3.2.RELEASE")
compile("org.springframework.boot:spring-boot-starter-thymeleaf:1.3.2.RELEASE")
compile('net.sourceforge.nekohtml:nekohtml:1.9.22')
compile("org.springframework.boot:spring-boot-starter-data-jpa:1.3.2.RELEASE")
compile('mysql:mysql-connector-java:5.1.36')
}
ในส่วนนี้ เราจะเก็บค่า connection ต่างๆ ของ database ไว้ใน application.properties ซึ่งเป็น configuration file ของ Spring Boot
เครื่องของผู้อ่านจำเป็นต้องมี MySQL Server ติดตั้งไว้ ถ้ายังไม่มีแนะนำให้ไปโหลดฟรีมาติดตั้งนะครับ แล้วสร้าง database เปล่าๆ ขึ้นมา ชื่อว่า spring-clinic
เมื่อมี MySQL Server ติดตั้งไว้ในเครื่องแล้ว ให้เปิด file application.properties เพิ่ม config เชื่อมต่อ database ต่างๆ ดังนี้
** \src\main\resources\spring.properties **
spring.thymeleaf.mode=LEGACYHTML5
spring.thymeleaf.cache=false
#database name is spring-clinic
spring.datasource.url = jdbc:mysql://localhost:3306/spring-clinic
spring.datasource.username = root
spring.datasource.password = 12345
# Keep the connection alive if idle for a long time (needed in production)
spring.datasource.testWhileIdle = true
spring.datasource.validationQuery = SELECT 1
# Show or not log for each sql query
spring.jpa.show-sql = true
# Hibernate ddl auto (create, create-drop, update)
spring.jpa.hibernate.ddl-auto = update
# Naming strategy
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
# Use spring.jpa.properties.* for Hibernate native properties (the prefix is
# stripped before adding them to the entity manager)
# The SQL dialect makes Hibernate generate better SQL for the chosen database
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
entity class เป็น class ที่เป็นตัวแทนของ database table ใช้เก็บข้อมูลต่างๆ ที่ดึงมาจาก database ดังนั้นโดยทั่วไป โครงสร้างของ entity class จะคล้ายกับ database table แต่ไม่จำเป็นต้องเหมือนกันก็ไปทั้งหมดก็ได้
entity class ยังเปรียบเหมือน model ใน MVC pattern model คือส่วนที่เก็บข้อมูลของ application
1 instance ของ entity class ยังสามารถเปรียบได้กับ 1 row ของ database table
เนื่องจาก spring-clinic ที่เรากำลังสร้างอยู่นั้นเป็น project สำหรับเก็บข้อมูลผู้ป่วยในคลินิกขนาดเล็ก ดังนั้น entity class หรือ model ที่สำคัญก็คือ class ที่เก็บข้อมูลป่วย โดยเราจะสร้าง Patient class ขึ้นมา แต่เป็น version ง่ายๆ แล้วจะเพิ่มเติมรายละเอียดอื่นๆ ในครั้งต่อไป
สร้าง class Patient.java ใน package model แล้วแก้ไขข้อมูลเป็นดังนี้
package com.codesanook.springclinic.model;
import javax.persistence.*;
@Entity
@Table(name = "patients")
public class Patient {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int hospitalNumber;
private String firstName;
private String lastName;
public int getHospitalNumber() {
return hospitalNumber;
}
public void setHospitalNo(int hospitalNumber) {
this.hospitalNumber = hospitalNumber;
}
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;
}
}
อธิบาย annotation ต่างๆ
** entity class ที่เราสร้างขึ้นมา บวกกับ config spring.jpa.hibernate.ddl-auto = update เมื่อเรา run Spring Boot web ขึ้นมาจะทำการสร้าง table Patient ให้โดยอัตโนมัติ และถ้ามีการเพิ่ม field ใน Patient.java ก็จะมีการเพิ่ม field ใน database ให้ด้วย **
ในบทความนี้เราได้ทำการติดตั้ง library ต่างๆ ที่จำเป็น เตรียม entity class ไว้ใช้งานแล้วในตอนต่อไป เราจะได้มาใช้งาน entity class ที่สร้างไว้แล้วครับ