Using Model Mapper in SpringBoot
1 min readNov 30, 2023
What is Model Mapper?
Model Mapper is a java library used to map between the Entity object and DTO object.
Steps to do it:
- Add the dependency in pom.xml
<!-- https://mvnrepository.com/artifact/org.modelmapper/modelmapper -->
<dependency>
<groupId>org.modelmapper</groupId>
<artifactId>modelmapper</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
2. Add ModelMapper Configuration, create new class in configuration package. Named it as ModelMapperConfiguration
@Configuration
public class ModelMapperConfiguration {
@Bean
public ModelMapper modelMapper() {
return new ModelMapper();
}
}
3. Product Model Class and ProductRequest Class
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "products")
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int productId;
private String description;
@Column(nullable = false)
@NotNull
private double price;
@Column(nullable = false)
@NotNull
private double stock;
public Product(String description, double price, double stock) {
this.description = description;
this.price = price;
this.stock = stock;
}
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ProductRequest {
private String description;
@Column(nullable = false)
@NotNull
private double price;
@Column(nullable = false)
@NotNull
private double stock;
}
4. Next we map between Model Class and DTO class in ProductServiceImp
@Service
@Log4j2
public class ProductServiceImp {
private ProductRepository productRepository;
private ModelMapper modelMapper;
public ProductService(ProductRepository productRepository,
ModelMapper modelMapper) {
this.productRepository = productRepository;
this.modelMapper = modelMapper;
}
public Product addProduct(ProductRequest productRequest){
// Map ProductRequest to Product using ModelMapper
Product product = modelMapper.map(productRequest, Product.class);
log.info("adding product");
// Save the mapped Product to database
return productRepository.save(product);
}
}