1. Khai báo các thư viện cần thiết
Trong tệp pom.xml, thêm các dependency sau:
<dependencies>
<!-- Web starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Data JPA -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- MySQL Connector -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- Thymeleaf (tùy chọn) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
2. Cấu hình kết nối cơ sở dữ liệu
Cấu hình trong application.properties:
spring.datasource.url=jdbc:mysql://localhost:3306/demo_db?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=secret
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
3. Định nghĩa Entity
Tạo lớp entity ánh xạ tới bảng trong cơ sở dữ liệu:
import javax.persistence.*;
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String fullName;
private String emailAddress;
private String contactNumber;
// Constructors, getters và setters
public User() {}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getFullName() {
return fullName;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
public String getEmailAddress() {
return emailAddress;
}
public void setEmailAddress(String emailAddress) {
this.emailAddress = emailAddress;
}
public String getContactNumber() {
return contactNumber;
}
public void setContactNumber(String contactNumber) {
this.contactNumber = contactNumber;
}
}
4. Tạo Repository
Khai báo interface kế thừa từ JpaRepository:
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
// Có thể mở rộng bằng các phương thức truy vấn tùy chỉnh
}
5. Triển khai Service
Xây dựng lớp service để xử lý logic nghiệp vụ:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserService {
private final UserRepository userRepo;
@Autowired
public UserService(UserRepository userRepo) {
this.userRepo = userRepo;
}
public User registerUser(User user) {
return userRepo.save(user);
}
public List<User> listAllUsers() {
return userRepo.findAll();
}
}
6. Xây dựng Controller
Tạo REST endpoint để tương tác qua HTTP:
import org.springframework.web.bind.annotation.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import java.util.List;
@RestController
@RequestMapping("/api/users")
public class UserController {
private final UserService userService;
@Autowired
public UserController(UserService userService) {
this.userService = userService;
}
@GetMapping
public ResponseEntity<List<User>> getUsers() {
return ResponseEntity.ok(userService.listAllUsers());
}
@PostMapping
public ResponseEntity<User> addUser(@RequestBody User user) {
User saved = userService.registerUser(user);
return ResponseEntity.ok(saved);
}
}
7. Cập nhật cấu trúc bảng tự động
Khi bật ddl-auto=update, Hibernate sẽ tự động điều chỉnh schema database theo thay đổi trong entity. Ví dụ, nếu thêm thuộc tính mới vào lớp User:
private LocalDate dateOfBirth;
Thì cột date_of_birth sẽ được thêm vào bảng users mà không cần can thiệp thủ công.