Thực thi ràng buộc

Làm sạch dữ liệu bằng Java

Dennis Lee

Software Engineer

Kiểm soát chất lượng dữ liệu

  • Annotation kiểm tra: kiểm soát chất lượng dữ liệu
  • Lỗi: thiếu quốc gia, số tiền không hợp lệ, số hộp âm
  • Lỗi gõ: 1000 hộp thay vì 100 hộp

 

 

Nhân viên bán hàng Quốc gia Sản phẩm Ngày Số tiền Hộp đã gửi
James Rudeforth UK Mint Chip Choco 4-Jan-22 $5320 100
Van Tuxwell India 85% Dark Bars 1-Aug-22 $7896 94
Gigi Bohling US Peanut Butter Cubes 7-Jul-22 $4501 91
Làm sạch dữ liệu bằng Java

Annotation kiểm tra cơ bản

import jakarta.validation.constraints.NotNull;     // Import rules for empty fields
import jakarta.validation.constraints.Size;        // Import rules for string length

public class ChocolateSale {
    @NotNull(message = "Salesperson cannot be empty")
    private String salesperson;


@NotNull(message = "Country cannot be empty") // Multiple rules can be stacked @Size(min = 2, max = 50) // Enforces country name length private String country;
@NotNull(message = "Product cannot be empty") private String product; }
Làm sạch dữ liệu bằng Java

Ràng buộc số

import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
// We will show message outputs later
public class ChocolateSale {
    @Min(value = 0, message = "Sales amount must be positive")
    private Double amount;


@Min(value = 1, message = "Must ship at least 1 box") @Max(value = 1000, message = "Cannot ship more than 1000 boxes") private Integer boxesShipped; }
Làm sạch dữ liệu bằng Java

Import để thực thi ràng buộc

// Stores unique validation errors (no duplicates)
import java.util.Set;
// Holds details about a single validation error (field, message, etc.)
import jakarta.validation.ConstraintViolation;
// Entry point for creating validators
import jakarta.validation.Validation;
// Checks data against rules
import jakarta.validation.Validator;
// Creates configured validators
import jakarta.validation.ValidatorFactory;
// Thrown when validation fails
import jakarta.validation.ConstraintViolationException;
Làm sạch dữ liệu bằng Java

Triển khai bộ kiểm tra

class SalesValidator {
    // Create tools for checking our data
    private static final ValidatorFactory factory = Validation.buildDefaultValidatorFactory();

// Get a validator to check sales records private static final Validator validator = factory.getValidator();
public static Set<ConstraintViolation<ChocolateSale>> validateSale(ChocolateSale sale) { // Check sale record and return any problems found return validator.validate(sale); } }
Làm sạch dữ liệu bằng Java

Xử lý kết quả kiểm tra

public class Main {
    public static void main(String[] args) {
        // Create sale with some invalid data (null country, negative amount)
        ChocolateSale sale = new ChocolateSale("James Rudeforth", null, "Mint Chip Choco",
                LocalDate.parse("2022-01-04"), -5320.0, 1500);


// Check sale for validation violations Set<ConstraintViolation<ChocolateSale>> violations = SalesValidator.validateSale(sale); // Print each validation error message violations.forEach(violation -> System.out.println(violation.getMessage()));
// If any violations found, throw exception if (!violations.isEmpty()) throw new ConstraintViolationException(violations); } }
Làm sạch dữ liệu bằng Java

Kết quả kiểm tra

Country cannot be empty
Sales amount must be positive
Cannot ship more than 1000 boxes

Exception in thread "main" jakarta.validation.ConstraintViolationException
Làm sạch dữ liệu bằng Java

Kiểm tra giúp tránh lỗi tốn kém

  • @NotNull, @Size, @Min, và @Max bắt lỗi sớm
  • Áp dụng kiểm tra vào các bài toán nghiệp vụ chung
  • Tuyến phòng thủ đầu tiên chống lỗi dữ liệu tốn kém

Hạt ca cao được sàng lọc trong nhà máy

Làm sạch dữ liệu bằng Java

Ayo berlatih!

Làm sạch dữ liệu bằng Java

Preparing Video For Download...