欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot3集成MapstructPlus的實(shí)現(xiàn)

 更新時(shí)間:2025年08月11日 11:19:55   作者:程序員張3  
本文主要介紹了SpringBoot3集成MapstructPlus的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

Mapstruct Plus 是 Mapstruct 的增強(qiáng)工具,在 Mapstruct 的基礎(chǔ)上,實(shí)現(xiàn)了自動(dòng)生成 Mapper 接口的功能,并強(qiáng)化了部分功能,使 Java 類型轉(zhuǎn)換更加便捷、優(yōu)雅。 www.mapstruct.plus/

引入依賴

pom.xml

<properties>
    <java.version>21</java.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <!-- 插件版本 -->
    <maven-compiler-plugin.version>3.11.0</maven-compiler-plugin.version>
    <lombok.version>1.18.38</lombok.version>
	<mapstruct-plus.version>1.4.8</mapstruct-plus.version>
    <lombok-mapstruct-binding.version>0.2.0</lombok-mapstruct-binding.version>
</properties>

<dependencyManagement>
  <dependencies>
      <!-- MapStructPlus 依賴
           https://mvnrepository.com/artifact/io.github.linpeilie/mapstruct-plus-spring-boot-starter
      -->
      <dependency>
          <groupId>io.github.linpeilie</groupId>
          <artifactId>mapstruct-plus-spring-boot-starter</artifactId>
          <version>${mapstruct-plus.version}</version>
      </dependency>
      
    </dependencies>
</dependencyManagement>

<build>
    <plugins>
        <!-- Maven 編譯插件 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>${maven-compiler-plugin.version}</version>
            <configuration>
                <source>${java.version}</source>    <!-- 源代碼使用的JDK版本 -->
                <target>${java.version}</target>    <!-- 需要生成的目標(biāo)class文件的編譯版本 -->
                <encoding>${project.build.sourceEncoding}</encoding> <!-- 字符集編碼,防止中文亂碼 -->
                <compilerArgs>
                    <arg>-parameters</arg>  <!-- 保留方法參數(shù)名稱 -->
                </compilerArgs>

                <annotationProcessorPaths>
                    <path>
                        <groupId>io.github.linpeilie</groupId>
                        <artifactId>mapstruct-plus-processor</artifactId> <!-- 定義了一個(gè)注解處理器的依賴項(xiàng), 必須手動(dòng)配置到此處,才能在編譯階段生成具體的映射實(shí)現(xiàn)類,避免運(yùn)行時(shí)的性能開銷 -->
                        <version>${mapstruct-plus.version}</version>
                    </path>
                    <!-- 依賴地址:https://mvnrepository.com/artifact/org.projectlombok/lombok-mapstruct-binding
                             解決 Lombok 與 MapStruct 的編譯順序沖突
                             強(qiáng)制 Lombok 在 MapStruct 處理完映射代碼后再運(yùn)行,從而避免字段缺失或無法識(shí)別的問題
                             官網(wǎng)提示:https://mapstruct.org/documentation/stable/reference/html/#lombok
                        -->
                    <path>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok-mapstruct-binding</artifactId>
                        <version>${lombok-mapstruct-binding.version}</version>
                    </path>
                    <!--
                        一旦你使用了 <annotationProcessorPaths>,Maven 將只使用你指定的處理器,默認(rèn)的 Lombok 注解處理器不會(huì)自動(dòng)加入。
                        所以此處需顯式添加 Lombok 注解處理器 依賴
                        -->
                    <path>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                        <version>${lombok.version}</version>
                    </path>
                </annotationProcessorPaths>
            </configuration>
        </plugin>
    </plugins>
</build>

封裝工具類

公共模塊pom.xml

<dependencies>
	<!-- 包含:SpringUtils -->
    <dependency>
        <groupId>cn.hutool</groupId>
        <artifactId>hutool-extra</artifactId>
    </dependency>
    <!-- mapstruct-plus映射工具類 -->
    <dependency>
        <groupId>io.github.linpeilie</groupId>
        <artifactId>mapstruct-plus-spring-boot-starter</artifactId>
    </dependency>
</dependencies>

工具類MapstructUtils.java

package com.zibocoder.plugins.common.util;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.extra.spring.SpringUtil;
import io.github.linpeilie.Converter;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;

import java.util.List;
import java.util.Map;

/**
 * @author zibocoder
 * @date 2025/7/19 17:34:58
 * @description Mapstruct工具類
 */
@NoArgsConstructor(access = AccessLevel.PRIVATE) // 自動(dòng)生成一個(gè)私有的無參構(gòu)造方法(禁止實(shí)例化:構(gòu)造函數(shù)是私有的,意味著這個(gè)類 不能從外部被實(shí)例化)
public class MapstructUtils {
    private final static Converter CONVERTER = SpringUtil.getBean(Converter.class);

    /**
     * 將 T 類型對象,轉(zhuǎn)換為 desc 類型的對象并返回
     *
     * @param source 數(shù)據(jù)來源實(shí)體
     * @param desc   描述對象 轉(zhuǎn)換后的對象
     * @return desc
     */
    public static <T, V> V convert(T source, Class<V> desc) {
        if (ObjectUtil.isNull(source)) {
            return null;
        }
        if (ObjectUtil.isNull(desc)) {
            return null;
        }
        return CONVERTER.convert(source, desc);
    }

    /**
     * 將 T 類型對象,按照配置的映射字段規(guī)則,給 desc 類型的對象賦值并返回 desc 對象
     *
     * @param source 數(shù)據(jù)來源實(shí)體
     * @param desc   轉(zhuǎn)換后的對象
     * @return desc
     */
    public static <T, V> V convert(T source, V desc) {
        if (ObjectUtil.isNull(source)) {
            return null;
        }
        if (ObjectUtil.isNull(desc)) {
            return null;
        }
        return CONVERTER.convert(source, desc);
    }

    /**
     * 將 T 類型的集合,轉(zhuǎn)換為 desc 類型的集合并返回
     *
     * @param sourceList 數(shù)據(jù)來源實(shí)體列表
     * @param desc       描述對象 轉(zhuǎn)換后的對象
     * @return desc
     */
    public static <T, V> List<V> convert(List<T> sourceList, Class<V> desc) {
        if (ObjectUtil.isNull(sourceList)) {
            return null;
        }
        if (CollUtil.isEmpty(sourceList)) {
            return CollUtil.newArrayList();
        }
        return CONVERTER.convert(sourceList, desc);
    }

    /**
     * 將 Map 轉(zhuǎn)換為 beanClass 類型的集合并返回
     *
     * @param map       數(shù)據(jù)來源
     * @param beanClass bean類
     * @return bean對象
     */
    public static <T> T convert(Map<String, Object> map, Class<T> beanClass) {
        if (MapUtil.isEmpty(map)) {
            return null;
        }
        if (ObjectUtil.isNull(beanClass)) {
            return null;
        }
        return CONVERTER.convert(map, beanClass);
    }
}

實(shí)際應(yīng)用

DeptAddForm->DeptEntity DeptAddForm.java

package com.zibocoder.system.domain.form;

import com.zibocoder.system.domain.entity.DeptEntity;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import org.hibernate.validator.constraints.Length;

/**
 * @author zibocoder
 * @date 2025/7/13 06:54:08
 * @description 部門添加表單
 */
@Data
@AutoMapper(target = DeptEntity.class, reverseConvertGenerate = false) //自動(dòng)映射當(dāng)前類與 DeptEntity.class 之間的字段對應(yīng)關(guān)系,reverseConvertGenerate = false 表示不生成反向轉(zhuǎn)換方法。
public class DeptAddForm {
    /**
     * 部門名稱
     */
    @NotBlank(message = "部門名稱不能為空")
    @Length(min = 1, max = 30, message = "部門名稱長度不能超過{max}個(gè)字符")
    private String deptName;
    /**
     * 父部門ID
     */
    @NotNull(message = "父部門ID不能為空")
    private Long parentId;
    /**
     * 排序
     */
    @NotNull(message = "顯示順序不能為空")
    private Integer theSort;
    /**
     * 備注
     */
    private String remark;
}

DeptEntity.java

package com.zibocoder.system.domain.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

/**
 * @author zibocoder
 * @date 2025/7/10 08:16:20
 * @description 部門實(shí)體對象
 */
@Data
@TableName(value = "sys_dept", autoResultMap = true)
public class DeptEntity {
    /**
     * 部門ID
     */
    @TableId(type = IdType.AUTO)
    private Long deptId;
    /**
     * 部門名稱
     */
    private String deptName;
    /**
     * 父部門ID
     */
    private Long parentId;
    /**
     * 祖級列表
     */
    private String ancestors;
    /**
     * 排序
     */
    private String theSort;
    /**
     * 部門狀態(tài):是否被禁用 false-0否 true-1是
     */
    private Boolean disabledFlag;
    /**
     * 備注
     */
    private String remark;
}

業(yè)務(wù)類 DeptService.java

/**
 * 新增部門
 * @param deptAddForm 部門新增表單
 * @return 響應(yīng)結(jié)果
 */
public ResponseResult<Void> addDept(DeptAddForm deptAddForm) {
    ...
    DeptEntity deptEntity = MapstructUtils.convert(deptAddForm, DeptEntity.class);
    ...
    deptMapper.insert(deptEntity);
    return ResponseResult.ok();
}

到此這篇關(guān)于SpringBoot3集成MapstructPlus的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)SpringBoot3 MapstructPlus內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • JAVA String.valueOf()方法的用法說明

    JAVA String.valueOf()方法的用法說明

    這篇文章主要介紹了JAVA String.valueOf()方法的用法說明,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Java中的定時(shí)器Timer詳解

    Java中的定時(shí)器Timer詳解

    這篇文章主要為大家詳細(xì)介紹了Java定時(shí)器Timer的使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • SpringBoot配置數(shù)據(jù)庫密碼加密的方法

    SpringBoot配置數(shù)據(jù)庫密碼加密的方法

    由于系統(tǒng)安全的考慮,配置文件中不能出現(xiàn)明文密碼的問題,本文就給大家詳細(xì)介紹下springboot配置數(shù)據(jù)庫密碼加密的方法,下面話不多說了,來一起看看詳細(xì)的介紹吧,需要的朋友可以參考下
    2023-08-08
  • 淺談Java中ArrayList的擴(kuò)容機(jī)制

    淺談Java中ArrayList的擴(kuò)容機(jī)制

    本文主要介紹了淺談Java中ArrayList的擴(kuò)容機(jī)制,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Java異常之圖書管理系統(tǒng)

    Java異常之圖書管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Java異常之圖書管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • SpringMVC Mybatis配置多個(gè)數(shù)據(jù)源并切換代碼詳解

    SpringMVC Mybatis配置多個(gè)數(shù)據(jù)源并切換代碼詳解

    這篇文章主要介紹了SpringMVC Mybatis配置多個(gè)數(shù)據(jù)源并切換代碼詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • java中ImageReader和BufferedImage獲取圖片尺寸實(shí)例

    java中ImageReader和BufferedImage獲取圖片尺寸實(shí)例

    這篇文章主要介紹了java中ImageReader和BufferedImage獲取圖片尺寸實(shí)例,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • Java中解析JSON和生成JSON字符串的全面指南

    Java中解析JSON和生成JSON字符串的全面指南

    在現(xiàn)代 Java 開發(fā)中,JSON(JavaScript Object Notation)作為一種輕量級的數(shù)據(jù)交換格式,廣泛應(yīng)用于前后端交互、配置文件讀取以及各類數(shù)據(jù)存儲(chǔ)場景,本文將深入剖析常用庫及對應(yīng)實(shí)現(xiàn)方式,助力您輕松駕馭 JSON 數(shù)據(jù)處理,需要的朋友可以參考下
    2025-03-03
  • SpringBoot中Bean生命周期自定義初始化和銷毀方法詳解

    SpringBoot中Bean生命周期自定義初始化和銷毀方法詳解

    這篇文章給大家詳細(xì)介紹了SpringBoot中Bean生命周期自定義初始化和銷毀方法,文中通過代碼示例講解的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01
  • 關(guān)于Mybatis-Plus?Wrapper是否應(yīng)該出現(xiàn)在Servcie類中

    關(guān)于Mybatis-Plus?Wrapper是否應(yīng)該出現(xiàn)在Servcie類中

    最近在做代碼重構(gòu),代碼工程采用了Controller/Service/Dao分層架構(gòu),Dao層使用了Mybatis-Plus框架,本文帶領(lǐng)大家學(xué)習(xí)Mybatis-Plus?Wrapper應(yīng)該出現(xiàn)在Servcie類中嗎,需要的朋友可以參考下
    2023-05-05

最新評論