0
0
Lập trình
Harry Tran
Harry Tran106580903228332612117

Khám Phá Chiến Lược Soft Delete và Cách Triển Khai Trong Spring Boot

Đăng vào 3 ngày trước

• 3 phút đọc

Giới thiệu về Soft Delete

Soft delete là một phương pháp quản lý dữ liệu hiệu quả, giúp ngăn chặn việc xóa vĩnh viễn các bản ghi trong cơ sở dữ liệu. Thay vì xóa hoàn toàn một bản ghi, chúng ta sẽ sử dụng một trường đặc biệt để đánh dấu rằng bản ghi đó đã không còn hoạt động. Điều này giúp dễ dàng phục hồi dữ liệu khi cần thiết, đồng thời duy trì tính toàn vẹn của hệ thống.

1. Lợi Ích Của Chiến Lược Soft Delete

1.1 Khôi Phục Dữ Liệu

Khi dữ liệu bị xóa một cách không mong muốn, việc phục hồi trở nên dễ dàng hơn rất nhiều với soft delete. Người dùng không cần phải trở về bản sao lưu mà vẫn có thể khôi phục thông tin một cách nhanh chóng.

1.2 Theo Dõi Lịch Sử Dữ Liệu

Việc giữ lại bản ghi giúp chúng ta có cái nhìn tổng quan và theo dõi lịch sử thay đổi dữ liệu theo thời gian. Điều này đặc biệt quan trọng trong việc phân tích xu hướng và tạo báo cáo.

1.3 Bảo Đảm Tính Toàn Vẹn Dữ Liệu

Soft delete không làm ảnh hưởng đến các mối quan hệ dữ liệu giữa các bảng khác nhau trong cơ sở dữ liệu, vì vậy việc xóa một bản ghi sẽ không gây ra sự cố cho bảng hoặc dữ liệu khác.

2. Cách Triển Khai Soft Delete Trong Spring Boot

2.1 Tạo Thực Thể Với Trường Soft Delete

Để bắt đầu triển khai soft delete, trước tiên bạn cần tạo một trường trong thực thể của bạn để đánh dấu bản ghi đã bị xóa. Dưới đây là ví dụ thực hiện:

java Copy
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Column;
import java.time.LocalDateTime;

@Entity
@Table(name = "users")
public class User {
    
    @Id
    private Long id;

    @Column(nullable = false)
    private String name;

    @Column(name = "deleted_at")
    private LocalDateTime deletedAt;

    // Getters and Setters
}

Trong ví dụ này, trường deletedAt sẽ chứa thời gian khi bản ghi được đánh dấu là đã bị xóa. Nếu trường này có giá trị null, bản ghi vẫn còn hoạt động.

2.2 Tạo Repository Với Các Phương Thức Truy Vấn Tùy Chỉnh

Tiếp theo, bạn cần tạo một repository để chỉ lấy những bản ghi còn hoạt động. Dưới đây là ví dụ:

java Copy
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.util.List;

public interface UserRepository extends JpaRepository<User, Long> {

    @Query("SELECT u FROM User u WHERE u.deletedAt IS NULL")
    List<User> findAllActive();

    @Query("SELECT u FROM User u WHERE u.id = :id AND u.deletedAt IS NULL")
    User findActiveById(@Param("id") Long id);
}

Các phương thức findAllActive()findActiveById() sẽ giúp bạn lấy những bản ghi còn hoạt động, loại trừ các bản ghi đã bị đánh dấu xóa.

2.3 Cập Nhật Service Để Triển Khai Soft Delete

Cuối cùng, bạn cần cập nhật service để thực hiện chức năng soft delete như sau:

java Copy
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    public void softDelete(Long id) {
        User user = userRepository.findById(id).orElseThrow(() -> new RuntimeException("User not found"));
        user.setDeletedAt(LocalDateTime.now());
        userRepository.save(user);
    }

    public List<User> getActiveUsers() {
        return userRepository.findAllActive();
    }

    public User getActiveUserById(Long id) {
        return userRepository.findActiveById(id);
    }
}

3. Kết Luận

Soft delete là một chiến lược quản lý dữ liệu hiệu quả dành cho những ứng dụng cần bảo đảm tính toàn vẹn và khả năng phục hồi. Thực hiện soft delete trong Spring Boot hoàn toàn đơn giản bằng cách thêm một trường cờ, tùy chỉnh repository và service. Nếu bạn có bất kỳ câu hỏi nào hoặc cần thêm thông tin về cách triển khai soft delete trong Spring Boot, đừng ngần ngại để lại bình luận bên dưới.

source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào