springboot 整合 Lombok、mapStruct

本文介绍了如何在Spring Boot项目中集成MapStruct和Lombok,展示了如何通过注解轻松实现UserDO与UserVO之间的数据转换,以及配置Maven编译器以处理MapStruct和Lombok注解处理器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

Lombok 是一款通过注解的形式简化并消除冗余代码的 Java 插件,利用Annotation Processor原理,在编译时生成一些重复代码。在 IDEA 环境下,需要额外安装一个 Lombok 插件。
MapStruct是一个Java注释处理器,用于生成类型安全的bean映射类。也是利用Annotation Processor原理,在开发环境中,比如po转vodomain转dto,通常我们会写一些convert 写一堆set get来处理这个转换Mapstruct 能简化这一个过程

springboot项目导入依赖

 	 <!--配置-->
    <properties>
        <java.version>1.8</java.version>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <org.mapstruct.version>1.5.2.Final</org.mapstruct.version>
        <org.projectlombok.version>1.18.24</org.projectlombok.version>
        <!--跳过单元测试-->
        <skipTests>true</skipTests>
    </properties>
	
	 <!--mvn 依赖-->
	<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct</artifactId>
            <version>${org.mapstruct.version}</version>
        </dependency>

        <dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct-processor</artifactId>
            <version>${org.mapstruct.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

UserDO

@Data
public class UserDO {

    private String name;

    private Integer age;
}

UserVO

@Data
public class UserVO {

    private String username;

    private Integer age;
}

UserConverter 类

@Mapper(componentModel = "spring")
public interface UserConverter {

    UserConverter INSTANCE = Mappers.getMapper(UserConverter.class);

    @Mappings({
            @Mapping(source = "username", target = "name"),
            @Mapping(source = "age", target = "age")
    })
    UserDO domain2dto(UserVO user);
}

测试转换


@SpringBootTest
class MapstructdemoApplicationTests {

    @Autowired
    private UserConverter userConverter;

    @Test
    void contextLoads() {
        UserVO userVO = new UserVO();
        userVO.setUsername("张三");
        userVO.setAge(1000);

        UserDO userDO = userConverter.domain2dto(userVO);
        System.out.println(userVO);
        System.out.println(userDO);

    }

}

在这里插入图片描述
在这里插入图片描述

编译打包报错(找不到get,set方法)

在这里插入图片描述

pom.xml 配置优化 添加一个plugin

		   <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven-compiler-plugin.version}</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <annotationProcessorPaths>
                        <!-- MapStruct 注解处理器 -->
                        <path>
                            <groupId>org.mapstruct</groupId>
                            <artifactId>mapstruct-processor</artifactId>
                            <version>${org.mapstruct.version}</version>
                        </path>
                        <!-- Lombok 注解处理器 -->
                        <path>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                            <version>${lombok.version}</version>
                        </path>
                        <path>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok-mapstruct-binding</artifactId>
                            <version>0.2.0</version>
                        </path>
                    </annotationProcessorPaths>
                </configuration>
            </plugin>

完整pom.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>mapstructdemo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>mapstructdemo</name>
    <description>mapstructdemo</description>
    <properties>
        <java.version>1.8</java.version>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <org.mapstruct.version>1.5.2.Final</org.mapstruct.version>
        <org.projectlombok.version>1.18.24</org.projectlombok.version>
        <!--跳过单元测试-->
        <skipTests>true</skipTests>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct</artifactId>
            <version>${org.mapstruct.version}</version>
        </dependency>

        <dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct-processor</artifactId>
            <version>${org.mapstruct.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
            <!-- Maven 编译插件,提供给 MapStruct 使用 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven-compiler-plugin.version}</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <annotationProcessorPaths>
                        <!-- MapStruct 注解处理器 -->
                        <path>
                            <groupId>org.mapstruct</groupId>
                            <artifactId>mapstruct-processor</artifactId>
                            <version>${org.mapstruct.version}</version>
                        </path>
                        <!-- Lombok 注解处理器 -->
                        <path>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                            <version>${lombok.version}</version>
                        </path>
                        <path>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok-mapstruct-binding</artifactId>
                            <version>0.2.0</version>
                        </path>
                    </annotationProcessorPaths>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
<think>嗯,用户想设计实现一个基于Spring Boot的校园商铺租赁系统。首先,我需要考虑系统的整体架构。Spring Boot通常采用分层架构,比如MVC模式。可能分为表现层、服务层、数据访问层,再加上数据库前端。用户可能希望知道每个层的作用以及如何整合。 然后,技术选型方面,后端用Spring Boot,前端可能需要模板引擎或者前后端分离。Thymeleaf是个不错的选择,简单易用,适合校园系统。持久层的话,MyBatis或者JPA都可以,但MyBatis更灵活,适合需要复杂查询的场景。数据库用MySQL比较常见,用户可能已经有相关经验。 功能模块设计方面,用户管理、商铺管理、租赁流程、支付审核这些模块都是必须的。用户需要注册登录,商铺信息需要CRUD操作,租赁流程包括申请合同管理。支付可能需要集成第三方接口,比如支付宝或微信,但校园内可能用校园支付系统。审核模块确保商铺租赁的合法性。 接下来是数据库设计。用户表、商铺表、租赁订单表、合同表支付记录表。主外键关系需要注意,比如商铺属于用户,订单关联用户商铺,合同关联订单,支付记录关联订单。索引优化对于查询性能很重要,比如商铺名称分类可能需要加索引。 权限控制方面,Spring Security或Shiro可以管理不同角色的权限。学生可能只能申请租赁,管理员需要审核商铺订单。这部分需要详细设计权限点,比如URL级别的拦截或者方法级别的注解。 系统集成可能需要短信服务验证用户,或者邮件通知租赁状态变更。第三方支付接口的集成需要处理回调安全问题,比如签名验证。另外,文件上传功能用于合同商铺图片,可能需要使用云存储或者本地存储。 性能优化方面,缓存商铺信息用Redis,减少数据库压力。分页查询商铺列表,避免一次性加载过多数据。数据库连接池配置HikariCP,提高连接管理效率。 毕设答辩的注意事项,用户可能需要结合算法,比如推荐商铺或者租赁价格预测。引用中的资料提到学校可能要求包含算法,所以得提醒用户考虑加入简单的算法模块,比如基于位置或热门程度的推荐。 最后,示例代码展示如何创建实体类、Mapper接口、Service层Controller,让用户有直观的参考。相关问题部分要覆盖技术选型、安全措施、集成测试、数据库优化扩展方向,帮助用户全面思考。</think>### Spring Boot校园商铺租赁系统设计与实现方案 #### 一、系统架构设计 采用分层架构模式: ``` 前端层(Thymeleaf/Vue) │ 业务层(Spring Boot) │ 数据层(MyBatis + MySQL) │ 基础服务(Redis + 第三方API) ``` #### 二、技术选型 1. **核心框架**:Spring Boot 2.7 + Spring MVC 2. **模板引擎**:Thymeleaf(服务端渲染)或 Vue.js(前后端分离) 3. **持久层**:MyBatis-Plus + Druid连接池 4. **数据库**:MySQL 8.0 配合索引优化 5. **安全框架**:Spring Security + JWT令牌 6. **辅助工具**:Lombok + MapStruct #### 三、功能模块设计 ```mermaid graph TD A[用户模块] --> B[商铺模块] B --> C[租赁管理] C --> D[支付系统] D --> E[审核系统] E --> F[统计分析] ``` #### 四、核心功能实现 1. **商铺信息管理**: ```java // 商铺实体类 @Data @TableName("shop") public class Shop { @TableId(type = IdType.AUTO) private Long id; private String name; private String location; private Double area; private Integer status; // 0-待审核 1-已上架 } ``` 2. **租赁流程控制**: ```python 租赁流程图: 1. 用户提交租赁申请 --> 2. 系统生成电子合同 --> 3. 支付押金 --> 4. 管理员审核 --> 5. 完成租赁 ``` 3. **支付接口集成**: ```java @PostMapping("/payment") public Result payOrder(@RequestBody PaymentDTO dto) { // 调用支付宝/微信支付接口 String tradeNo = paymentService.createTrade(dto); return Result.ok(tradeNo); } ``` #### 五、数据库设计要点 ```sql CREATE TABLE `rental_order` ( `id` BIGINT PRIMARY KEY AUTO_INCREMENT, `shop_id` BIGINT NOT NULL, `user_id` BIGINT NOT NULL, `start_date` DATE, `end_date` DATE, INDEX `idx_user` (`user_id`), FOREIGN KEY (`shop_id`) REFERENCES shop(`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ``` #### 六、安全方案 1. 使用Spring Security实现RBAC权限控制 2. 敏感数据采用AES加密存储 3. 接口防刷设计:令牌桶限流算法 4. XSS攻击防护:HTML转义处理 #### 七、性能优化措施 1. 商铺列表查询缓存:Redis存储热点数据 2. 分页查询优化:MyBatis分页插件+覆盖索引 3. 文件存储:MinIO对象存储服务 4. 异步任务:@Async处理支付回调 #### 八、毕设扩展建议 1. 增加商铺推荐算法(基于协同过滤) 2. 集成GIS地图展示商铺位置 3. 添加租赁价格预测模型 4. 实现智能合同审核(NLP文本分析) [^1]: 参考学生管理系统的基础架构设计 [^2]: 结合当前高校对毕设系统的算法要求
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yweir

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值