Bài 04: Kết nối Spring với cơ sở dữ liệu MySQL

Spring hỗ trợ kết nối đa dạng các cơ sở dữ liệu SQL và NoSQL

Requirements

Thời lượng: 15 phútEditor hoặc IDE: Sublime hoặc tuỳ thích
JDK: 1.8 hoặc cao hơn
Gradle: 4+
MySQL: 5.6 hoặc cao hơn. Xem hướng dẫn cài đặt MySQL tại đây. Tạo một cơ sở dữ liệu rỗng có tên db_example
Knowledge: Xem bài MVC tại đây

Xây dựng

Truy cập https://start.spring.io tạo project với các thông số
  • Generate a Gradle Project with Java and Spring Boot 2.0.1
  • Group com.hocspringcoban
  • Artifact post04_mysql
  • Dependencies Web, JPA, MySQL

Thư mục resources chứa các tài nguyên cho project bao gồm

  • Thư mục static chứa các tài nguyên tĩnh như js, css
  • Thư mục template chứa các view
  • Tập tin application.properties chứa config cho project Spring

Xây dựng tập tin application.properties

spring.jpa.hibernate.ddl-auto=create
spring.datasource.url=jdbc:mysql://localhost:3306/db_example
spring.datasource.username=root
spring.datasource.password=password

Ghi chú

  • spring.jpa.hibernate.ddl-auto=create ra lệnh cho spring tạo các bảng khi khởi chạy
  • spring.datasource.url chỉ thị địa chỉ kết nối
  • spring.datasource.username chỉ thị username của server
  • spring.datasource.password chỉ thị password của server
  • Thay username và password tương ứng

Xây dựng src/main/java/com.hocspringcoban.post04_mysql/User.java

package com.hocspringcoban.post04_mysql;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class User {
    private @Id
    @GeneratedValue
    Integer id;
    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

Ghi chú

  • @Entity ra lệnh cho Hibernate tạo bảng sau đây trong cơ sở dữ liệu (db_example). Về Hibernate và JPA sẽ có bài viết nói sau
  • @Id @GeneratedValue chỉ thị trường sau đây sẽ là khoá chính và tự khởi tạo giá trị

Xây dựng src/main/java/com.hocspringcoban.post04_mysql/UserRepository.java

package com.hocspringcoban.post04_mysql;

import org.springframework.data.repository.CrudRepository;

public interface UserRepository extends CrudRepository<User, Long> {
}

Ghi chú

  • CrudRepository tự cung cấp các lệnh Create, Read, Update và Delete

Xây dựng src/main/java/com.hocspringcoban.post04_mysql/UserController.java

package com.hocspringcoban.post04_mysql;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserRepository userRepository;

    @GetMapping("/create")
    public @ResponseBody User createUser(@RequestParam String username, @RequestParam String password) {
        User user = new User();
        user.setUsername(username);
        user.setPassword(password);
        userRepository.save(user);
        return user;
    }

    @GetMapping("/index")
    public @ResponseBody Iterable<User> index() {
        return userRepository.findAll();
    }
}

Ghi chú

  • @Controller ghi chú class này là một Controller
  • @RequestMapping("/user") chỉ thị tất cả request vào tiền tố /user sẽ được controller này xử lý
  • @Autowired sẽ tự tìm class có tên UserRepository, khởi tạo nó và gán cho biến userRepository
  • @GetMapping("/create") chỉ thị tất cả GET vào tiền tố /user/create sẽ được function này xử lý

Kiểm thử

Tại thư mục post04_mysql, chạy lệnh gradle bootRun để run
Truy cập http://localhost:8080/user/index để xem thành quả

Note: Sau lần chạy đầu tiên, config lại tệp application.properties ở dòng đầu tiên như sau

spring.jpa.hibernate.ddl-auto=none
Việc này ngăn chặn hibernate tạo lại các bảng trong cơ sở dữ liệu

Nhận xét

Bài đăng phổ biến từ blog này

Bài 02: Tổng quan về Spring, Spring Boot và sử dụng Spring Initializr

Bài 01: Xây dựng ứng dụng Java bằng Gradle