最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2025年08月11日 11:19:55   作者:程序員張3  
本文主要介紹了SpringBoot3集成MapstructPlus的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(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)行,從而避免字段缺失或無(wú)法識(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è)私有的無(wú)參構(gòu)造方法(禁止實(shí)例化:構(gòu)造函數(shù)是私有的,意味著這個(gè)類 不能從外部被實(shí)例化)
public class MapstructUtils {
    private final static Converter CONVERTER = SpringUtil.getBean(Converter.class);

    /**
     * 將 T 類型對(duì)象,轉(zhuǎn)換為 desc 類型的對(duì)象并返回
     *
     * @param source 數(shù)據(jù)來(lái)源實(shí)體
     * @param desc   描述對(duì)象 轉(zhuǎn)換后的對(duì)象
     * @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 類型對(duì)象,按照配置的映射字段規(guī)則,給 desc 類型的對(duì)象賦值并返回 desc 對(duì)象
     *
     * @param source 數(shù)據(jù)來(lái)源實(shí)體
     * @param desc   轉(zhuǎn)換后的對(duì)象
     * @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ù)來(lái)源實(shí)體列表
     * @param desc       描述對(duì)象 轉(zhuǎn)換后的對(duì)象
     * @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ù)來(lái)源
     * @param beanClass bean類
     * @return bean對(duì)象
     */
    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 之間的字段對(duì)應(yīng)關(guān)系,reverseConvertGenerate = false 表示不生成反向轉(zhuǎn)換方法。
public class DeptAddForm {
    /**
     * 部門名稱
     */
    @NotBlank(message = "部門名稱不能為空")
    @Length(min = 1, max = 30, message = "部門名稱長(zhǎng)度不能超過(guò){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í)體對(duì)象
 */
@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;
    /**
     * 祖級(jí)列表
     */
    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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

最新評(píng)論

巴马| 裕民县| 新巴尔虎右旗| 庆安县| 盐边县| 尚义县| 靖西县| 香河县| 安徽省| 宾阳县| 彭山县| 苍溪县| 石棉县| 临沧市| 大关县| 新密市| 南宁市| 德江县| 新昌县| 长兴县| 松潘县| 木兰县| 咸阳市| 洛南县| 黔西县| 故城县| 华蓥市| 屏边| 商水县| 图木舒克市| 韶山市| 会宁县| 霍邱县| 马山县| 皋兰县| 铜陵市| 桂阳县| 澄迈县| 尉犁县| 鹤壁市| 舞钢市|