Uso básico del generador de código de mapeo Java Bean en MapStruct

1. Introducción:

MapStruct es un procesador de anotaciones de Java que se utiliza para generar automáticamente código de mapeo entre beans de Java.

Puede simplificar enormemente el proceso de conversión de datos y reducir la carga de trabajo de escribir código de conversión manualmente.
estructura de mapas

2. Fondo:

En el desarrollo real, a menudo nos encontramos con situaciones en las que necesitamos convertir datos de un bean Java a otro bean Java.

En ausencia de herramientas de conversión automática, generalmente necesitamos escribir manualmente el código de conversión para asignar los valores de atributo del objeto de origen a los atributos correspondientes del objeto de destino uno por uno.

Este código de conversión suele ser muy detallado y propenso a errores.

Para resolver este problema, nació MapStruct.

Agrega anotaciones a las clases de Java Bean, especifica la relación de mapeo entre los objetos de origen y los objetos de destino y luego utiliza un procesador de anotaciones para generar automáticamente código de conversión.

De esta manera, los desarrolladores ya no necesitan escribir códigos de conversión manualmente, lo que mejora en gran medida la eficiencia del desarrollo y la calidad del código.

3. Conceptos relacionados:

1. Mapeador:

Un asignador es una interfaz que define reglas de conversión entre objetos de origen y de destino. Podemos definir múltiples métodos abstractos en la interfaz del asignador, cada método representa una regla de conversión específica. Es necesario agregar la anotación @Mapper a la interfaz del asignador para indicarle a MapStruct que genere el código de conversión para la interfaz.

2. Método de mapeo:

El método de mapeo es un método abstracto en la interfaz del mapeador, que se utiliza para definir la relación de mapeo de atributos entre el objeto de origen y el objeto de destino. Es necesario agregar la anotación @Mapping al método de mapeo para especificar la relación de mapeo entre los atributos de origen y los atributos de destino.

3. Método de mapeo regular:

El método de mapeo convencional se utiliza para asignar los valores de atributo del objeto de origen a los atributos correspondientes del objeto de destino uno por uno. Este es el método de mapeo más común y su lista de parámetros debe contener el objeto de origen y el objeto de destino.

4. Método de mapeo anidado:

El método de mapeo anidado se utiliza para manejar la relación anidada entre el objeto de origen y el objeto de destino. Cuando hay objetos anidados en los objetos de origen y de destino, podemos utilizar el método de mapeo anidado para manejar la conversión entre objetos anidados.

5. Método de mapeo de colecciones:

El método de mapeo de colección se utiliza para manejar la relación de colección entre los objetos de origen y los objetos de destino. Cuando existen propiedades de colección en los objetos de origen y de destino, podemos usar el método de mapeo de colección para manejar la conversión entre las propiedades de la colección.

En resumen, MapStruct es una herramienta de conversión de Java poderosa y conveniente que puede ayudar a los desarrolladores a generar automáticamente códigos de mapeo entre beans Java y reducir la carga de trabajo de escribir códigos de conversión manualmente. Su uso es muy sencillo, basta con añadir anotaciones y definir reglas de conversión.

4. Casos de uso

A continuación se ofrece un ejemplo de diferentes propiedades del objeto de origen y del objeto de destino para ilustrar cómo utilizar MapStruct para la conversión.

Supongamos que tenemos las siguientes dos clases:

public class SourceObject {
    
    
    private String name;
    private int age;
    // getters and setters
}

public class TargetObject {
    
    
    private String fullName;
    private int yearsOld;
    // getters and setters
}

El atributo de nombre del objeto de origen corresponde al atributo de nombre completo del objeto de destino, y el atributo de edad del objeto de origen corresponde al atributo de años del objeto de destino.

Entonces debemos realizar los siguientes pasos:

1. Agregar dependencias:

Agregue la dependencia de MapStruct en el archivo pom.xml del proyecto.

<dependency>
    <groupId>org.mapstruct</groupId>
    <artifactId>mapstruct</artifactId>
    <version>1.4.2.Final</version>
</dependency>

2. Cree una interfaz de convertidor:

Defina una interfaz, márquela con la anotación @Mapper y especifique el parámetro componenteModel como Spring (si usa el marco Spring).

@Mapper(componentModel = "spring")
public interface ObjectMapper {
    
    
    @Mapping(source = "name", target = "fullName")
    @Mapping(source = "age", target = "yearsOld")
    TargetObject sourceToTarget(SourceObject sourceObject);
}

En este ejemplo, utilizamos la anotación @Mapping para especificar la relación de mapeo entre las propiedades de origen y las propiedades de destino.

3. Generar clase de implementación del convertidor:

Utilice Maven para construir el proyecto y MapStruct generará automáticamente una clase de implementación que implementa la interfaz del convertidor.

4. Utilice un convertidor:

Utilice convertidores para la conversión de objetos en código.

SourceObject source = new SourceObject();
source.setName("John");
source.setAge(25);

ObjectMapper mapper = new ObjectMapperImpl(); // 自动生成的实现类
TargetObject target = mapper.sourceToTarget(source);

System.out.println(target.getFullName()); // 输出 "John"
System.out.println(target.getYearsOld()); // 输出 25

Ahora, puede ver que la propiedad de nombre del objeto de origen está asignada a la propiedad nombre completo del objeto de destino, y la propiedad de edad del objeto de origen está asignada a la propiedad años del objeto de destino. De esta manera, puede utilizar MapStruct para realizar conversiones de mapeo con diferentes atributos del objeto de origen y del objeto de destino.

5. Los principios subyacentes de MapStruct

El principio subyacente de MapStruct es utilizar el procesador de anotaciones de Java (Annotation Processor) para generar código de conversión. El procesador de anotaciones es una herramienta que escanea y procesa anotaciones en tiempo de compilación. Puede leer la información de anotaciones en el código fuente y generar nuevo código Java basado en la información de anotaciones.

Cuando agregamos la anotación @Mapper en la interfaz del asignador, el procesador de anotaciones escanea la información de la anotación en la interfaz y sus métodos y genera un código de conversión basado en la información de la anotación. El proceso específico es el siguiente:

1. Interfaz del mapeador de escaneo:

El procesador de anotaciones escanea la información de anotaciones en la interfaz del asignador para obtener metadatos como tipos de objetos de origen y destino, métodos de mapeo, etc.

2. Método de mapeo analítico:

El procesador de anotaciones analizará la información de anotaciones en el método de mapeo, incluida la relación de mapeo entre los atributos de origen y los atributos de destino, la lógica de conversión, etc.

3. Generar código de conversión:

Según los tipos de objeto de origen y objeto de destino y la información de anotación del método de mapeo, el procesador de anotaciones generará un código de conversión y asignará los valores de atributo del objeto de origen a los atributos correspondientes del objeto de destino.

4. Procesamiento del compilador:

El procesador de anotaciones escribirá el código de conversión generado en el flujo de salida del compilador, y el compilador compilará el código en un archivo de código de bytes.

5. Utilice el código de conversión:

En tiempo de ejecución real, podemos usar directamente el código de conversión generado y llamar al método de mapeo para convertir entre objetos.

Al utilizar un procesador de anotaciones, MapStruct puede generar automáticamente código de conversión en tiempo de compilación, evitando la sobrecarga del rendimiento en tiempo de ejecución y mejorando la eficiencia de la conversión. Al mismo tiempo, debido a que el código se genera en tiempo de compilación, el código de conversión generado se puede verificar y depurar durante la fase de desarrollo, lo que reduce la posibilidad de errores al escribir el código de conversión manual.

Supongo que te gusta

Origin blog.csdn.net/qq_39939541/article/details/132286021
Recomendado
Clasificación