- vừa được xem lúc

Các loại model mapper trong java spring

0 0 14

Người đăng: NamTC

Theo Viblo Asia

Trong Java Spring, có hai loại model mapper chính:

  • ModelMapper là một thư viện Java mã nguồn mở được sử dụng để ánh xạ các đối tượng Java. Nó cung cấp một API đơn giản và dễ sử dụng để ánh xạ giữa các đối tượng có cấu trúc tương tự.
  • MapStruct là một công cụ mã nguồn Java được sử dụng để tự động tạo các mapper giữa các đối tượng Java. Nó sử dụng các chú thích (anotation) để mô tả các ánh xạ giữa các đối tượng, sau đó tạo ra mã Java thực hiện các ánh xạ đó.

1. ModelMapper

ModelMapper là một lựa chọn tốt cho các ứng dụng cần ánh xạ các đối tượng Java đơn giản. Nó cung cấp một API dễ sử dụng và có thể được sử dụng để ánh xạ giữa các đối tượng có cấu trúc tương đối đơn giản.

Dưới đây là một ví dụ chi tiết hơn về cách sử dụng ModelMapper để ánh xạ các đối tượng Java:

import com.modelmapper.ModelMapper; public class Example { public static void main(String[] args) { // Create two objects Customer customer = new Customer("John Doe", 30); CustomerDto customerDto = new CustomerDto(); // Create a ModelMapper ModelMapper modelMapper = new ModelMapper(); // Map the customer to the customerDto modelMapper.map(customer, customerDto); // Print the customerDto System.out.println(customerDto); }
}

Trong ví dụ này, chúng ta tạo hai đối tượng: một đối tượng Customer và một đối tượng CustomerDto. Sau đó, chúng ta tạo một ModelMapper và sử dụng nó để ánh xạ đối tượng Customer sang đối tượng CustomerDto. Cuối cùng, chúng ta in đối tượng CustomerDto ra console.

Để ánh xạ các thuộc tính của hai đối tượng, chúng ta sử dụng phương thức map() của ModelMapper. Phương thức này có hai đối số: đối tượng nguồn và đối tượng đích.

Trong ví dụ này, chúng ta ánh xạ thuộc tính name của đối tượng Customer sang thuộc tính customerName của đối tượng CustomerDto. Chúng ta cũng ánh xạ thuộc tính age của đối tượng Customer sang thuộc tính customerAge của đối tượng CustomerDto.

Chúng ta cũng có thể sử dụng các chú thích của ModelMapper để mô tả các ánh xạ giữa các thuộc tính của hai đối tượng. Ví dụ:

import com.modelmapper.ModelMapper; public class Example { public static void main(String[] args) { // Create two objects Customer customer = new Customer("John Doe", 30); CustomerDto customerDto = new CustomerDto(); // Create a ModelMapper ModelMapper modelMapper = new ModelMapper(); // Map the customer to the customerDto using annotations modelMapper.map(customer, customerDto, // Specify the source property @Mapping(source = "name", target = "customerName"), // Specify the target property @Mapping(source = "age", target = "customerAge")); // Print the customerDto System.out.println(customerDto); }
}

Trong ví dụ này, chúng ta sử dụng các chú thích @Mapping() để mô tả các ánh xạ giữa các thuộc tính của hai đối tượng. Chú thích @Mapping() có hai đối số: thuộc tính nguồn và thuộc tính đích.

import com.modelmapper.ModelMapper; public class Example { public static void main(String[] args) { // Create two objects Customer customer = new Customer("John Doe", 30, new Address("123 Main Street", "Anytown", "CA", 12345)); CustomerDto customerDto = new CustomerDto(); // Create a ModelMapper ModelMapper modelMapper = new ModelMapper(); // Map the customer to the customerDto using annotations modelMapper.map(customer, customerDto, // Specify the source property @Mapping(source = "name", target = "customerName"), // Specify the target property @Mapping(source = "age", target = "customerAge"), // Map the address property @Mapping(source = "address", target = "customerAddress")); // Print the customerDto System.out.println(customerDto); }
}

Trong ví dụ này, chúng ta sử dụng chú thích @Mapping() để ánh xạ thuộc tính address của đối tượng Customer sang thuộc tính customerAddress của đối tượng CustomerDto.

Để biết thêm thông tin về cách sử dụng ModelMapper, vui lòng tham khảo tài liệu tham khảo của ModelMapper.

2.MapStruct

MapStruct là một lựa chọn tốt cho các ứng dụng cần ánh xạ các đối tượng Java phức tạp. Nó có thể được sử dụng để ánh xạ giữa các đối tượng có cấu trúc phức tạp, bao gồm các đối tượng có các thuộc tính phức tạp như danh sách, bản đồ, v.v.

Để sử dụng MapStruct, bạn cần thêm nó vào dependency của dự án. Sau đó, bạn có thể sử dụng chú thích của MapStruct để mô tả các ánh xạ giữa các đối tượng. Dưới đây là một ví dụ chi tiết về cách sử dụng MapStruct để ánh xạ các đối tượng Java:

@Mapper
public interface CustomerMapper { @Mapping(source = "name", target = "customerName") @Mapping(source = "age", target = "customerAge") CustomerDto toCustomerDto(Customer customer);
}

Trong ví dụ này, chúng ta tạo một interface CustomerMapper được chú thích bằng @Mapper. Interface này xác định một phương thức toCustomerDto() được sử dụng để ánh xạ một đối tượng Customer sang một đối tượng CustomerDto. Phương thức này sử dụng các chú thích @Mapping() để mô tả các ánh xạ giữa các thuộc tính của hai đối tượng.

Để sử dụng MapStruct, chúng ta cần sử dụng công cụ mã nguồn của MapStruct để tự động tạo mã Java thực hiện các ánh xạ đó. Chúng ta có thể sử dụng lệnh sau để tạo mã Java:

mvn compile

Sau khi tạo mã Java, chúng ta có thể sử dụng nó để ánh xạ các đối tượng như sau:

import com.example.mapper.CustomerMapper;
import com.example.model.Customer;
import com.example.model.dto.CustomerDto; public class Example { public static void main(String[] args) { // Create a customer Customer customer = new Customer("John Doe", 30); // Create a customerDto CustomerDto customerDto = CustomerMapper.INSTANCE.toCustomerDto(customer); // Print the customerDto System.out.println(customerDto); }
}

Trong ví dụ này, chúng ta sử dụng phương thức toCustomerDto() của interface CustomerMapper để ánh xạ một đối tượng Customer sang một đối tượng CustomerDto.

Dưới đây là một ví dụ khác về cách sử dụng MapStruct để ánh xạ các thuộc tính phức tạp:

@Mapper
public interface AddressMapper { @Mapping(source = "street", target = "street") @Mapping(source = "city", target = "city") @Mapping(source = "state", target = "state") @Mapping(source = "zipCode", target = "zipCode") AddressDto toAddressDto(Address address);
}

Trong ví dụ này, chúng ta tạo một interface AddressMapper được chú thích bằng @Mapper. Interface này xác định một phương thức toAddressDto() được sử dụng để ánh xạ một đối tượng Address sang một đối tượng AddressDto. Phương thức này sử dụng các chú thích @Mapping() để mô tả các ánh xạ giữa các thuộc tính của hai đối tượng.

Để sử dụng MapStruct để ánh xạ các thuộc tính phức tạp, chúng ta cần sử dụng các chú thích @Mapping() cho từng thuộc tính của đối tượng đích.

Dưới đây là một ví dụ cuối cùng về cách sử dụng MapStruct để xử lý các trường hợp ngoại lệ:

@Mapper(componentModel = "spring")
public interface CustomerMapper { @Mapping(source = "name", target = "customerName") @Mapping(source = "age", target = "customerAge") CustomerDto toCustomerDto(Customer customer) throws AgeException; class AgeException extends RuntimeException { public AgeException(String message) { super(message); } }
}

Trong ví dụ này, chúng ta sử dụng annotation @Mapper(componentModel = "spring") để cho phép MapStruct tự động tạo các bean của interface CustomerMapper.

Chúng ta cũng sử dụng annotation @Mapping() để mô tả các ánh xạ giữa các thuộc tính của hai đối tượng.

Ngoài ra, chúng ta sử dụng annotation @ExceptionHandler() để xử lý trường hợp ngoại lệ AgeException.

So sánh

ModelMapper và MapStruct đều là những công cụ hữu ích để ánh xạ các đối tượng Java. Tuy nhiên, chúng có một số điểm khác biệt chính:

Tính năng ModelMapper MapStruct
Cấu trúc API thủ công Tự động tạo mã
Khả năng mở rộng Cao Thấp
Hiệu suất Thấp hơn Cao hơn

Lựa chọn

Lựa chọn công cụ ánh xạ nào phụ thuộc vào nhu cầu của ứng dụng của bạn. Nếu bạn cần ánh xạ các đối tượng Java đơn giản, thì ModelMapper là một lựa chọn tốt. Nếu bạn cần ánh xạ các đối tượng Java phức tạp, thì MapStruct là một lựa chọn tốt hơn.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Bắt và xử lý exception trong Java spring và RESTful API

Để nhận và xử lý exception trong restfull api java spring, bạn có thể sử dụng một trong hai cách sau:. Cách 1: Sử dụng annotation @ExceptionHandler.

0 0 12

- vừa được xem lúc

Xử lý exception đúng cách trong Java

Xử lý exception một cách đúng đắn là một phần quan trọng của việc viết code chất lượng trong Java, giúp đảm bảo tính ổn định và dễ bảo trì ứng dụng. Dưới đây là một số nguyên tắc và ví dụ về cách xử l

0 0 18

- vừa được xem lúc

Dockerize project Java Spring Boot, MySQL, Redis

Hello các bạn lại là mình đây . Một ngày cuối năm miền bắc lạnh quá trời lạnh .

0 0 17

- vừa được xem lúc

Giải Thích IoC (Inversion of Control) Bằng Ví Dụ Dễ Hiểu

Inversion of Control (IoC) Là Gì. . Ví Dụ Thực Tiễn Về IoC. 1.

0 0 2

- vừa được xem lúc

Spring Boot MapStruct Lombok không sử dụng Maven Compiler Plugin

Giới thiệu. Các bạn đã quá mệt mõi với việc sử dụng MapStruct trong dự án Spring Boot của mình khi nó:. . Thường xuyên thông báo lỗi compile với Lombok.

0 0 19

- vừa được xem lúc

Microservice in action - Data mapping over services

Chào anh em, anh em đã bao giờ đối mặt với việc mapping data giữa các services chưa. Nếu rồi ắt hẳn anh em cũng gặp nhiều vất vả.

0 0 1