Written by : Nguyễn Hoàng Đạt - Lớp Java07
Email : hoangdat3179@gmail.com

Trong hướng dẫn này chúng ta sẽ cùng nhau tìm hiểu cách sử dụng thư viện ModelMapper để mapping qua lại giữa các object trong Spring.

1. Giới thiệu ModelMapper

1.1. ModelMapper là gì?

ModelMapper là một thư viện Java, giúp đơn giản hóa code mapping các object. Mapping có thể hiểu là việc convert qua lại giữa hai object có cấu trúc gần giống nhau. Trong Spring Boot có các dạng khác nhau của data, nhưng cấu trúc gần tương tự nhau, nên cũng dùng được thư viện này với chúng. Ví dụ map giữa entity và model, entity và DTO,…

Ví dụ chúng ta có hai classUser (entity) và UserDto khá giống nhau, nhưng UserDto không có trường nhạy cảm như password.

@Getter
@Setter
class User {
    private String username;
    private String password;
    private String displayName;
    private int age;
}

@Getter
@Setter
class UserDto {
    private String username;
    private String displayName;
    private int age;
}

Dùng thư viện ModelMapper.

// Object nguồn
User user = new User("A", "abc123", "Nguyễn Văn A", 20);

// Tạo mapper object
ModelMapper mapper = new ModelMapper();

// Map thành object đích
UserDto userDto = mapper.map(user, UserDto.class);

2. Cách sử dụng ModelMapper

2.1 Thêm Maven vào project

Thêm ModelMapper vào project Spring Boot tương tự các dependency khác. Nếu project sử dụng Maven, chỉ cần thêm phần này vào file pom.xml

<dependency>
    <groupId>org.modelmapper</groupId>
    <artifactId>modelmapper</artifactId>
    <version>2.4.4</version>
</dependency>

2.2 Tạo cấu hình và sử dụng

Ta tạo một file cấu hình ModelMapperConfig.java như sau.

@Configuration
public class ModelMapperConfig {
    @Bean
    public ModelMapper modelMapper() {
        // Tạo object và cấu hình
        ModelMapper modelMapper = new ModelMapper();
        modelMapper.getConfiguration()
                .setMatchingStrategy(MatchingStrategies.STRICT);
        return modelMapper;
    }
}

Code trên sử dụng @Configuration@Bean để định nghĩa bean.

Sau đó dùng ModelMapper.

@Service
public class UserService {
    @Autowired
    private final ModelMapper mapper;

    public UserDto getUser(String username) {
        // Lấy User entity ra từ DB
        User user = userRepository.findByUsername(username);

        // Map thành DTO
        UserDto userDto = mapper.map(user, UserDto.class);
        
        return userDto;
    }
}

3. Kết

Với hướng dẫn bên trên các mọi người đã có thể sử dụng ModelMapper để ánh xạ các thuộc tính của thực thể (Entity) sang DTO ngoài ra còn có rất nhiều cách để ánh xạ trong ModelMapper mọi người có thể xem thêm tại https://www.baeldung.com/java-modelmapper.