MyBatis-Plus 是一个非常强大的 ORM 框架,基于 MyBatis 进行扩展,提供了许多便捷的功能,例如代码生成器,可以极大地提高开发效率。在本篇文章中,我们将讨论如何使用 MyBatis-Plus 自动生成代码,并处理 DTO(数据传输对象)和 VO(视图对象)等模型。
1. 环境准备
在开始之前,确保你的项目已经引入了 MyBatis-Plus 的依赖。以 Maven 项目为例,添加以下依赖到 pom.xml
文件中:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version>
</dependency>
2. 配置 MyBatis-Plus
在 application.yml
或 application.properties
文件中,配置数据库连接信息和 MyBatis-Plus 相关设置:
spring:
datasource:
url: jdbc:mysql://localhost:3306/db_name?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
username: root
password: your_password
mybatis-plus:
global-config:
db-config:
# 主键策略
id-type: auto
3. 自动生成代码
MyBatis-Plus 提供了代码生成器,可以根据数据库表自动生成 Entity、Mapper、Service、Controller 等代码。以下是一个示例代码生成器的实现:
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import java.util.Collections;
public class CodeGenerator {
public static void main(String[] args) {
FastAutoGenerator.create("jdbc:mysql://localhost:3306/db_name", "root", "your_password")
.globalConfig(builder -> {
builder.author("your_name") // 设置作者
.outputDir("D://code") // 生成文件的输出目录
.enableSwagger() // 开启 swagger 方式
.fileOverride(); // 文件覆盖
})
.packageConfig(builder -> {
builder.parent("com.example") // 设置父包名
.moduleName("demo") // 设置模块名
.entity("model") // 设置实体包名
.mapper("mapper") // 设置 Mapper 包名
.service("service") // 设置 Service 包名
.controller("controller") // 设置 Controller 包名
.other("vo") // 设置 VO 包名
.outputDir("D://code") // 输出目录
.serviceImpl("service.impl") // 设置 ServiceImpl 包名
.dto("dto"); // 设置 DTO 包名
})
.strategyConfig(builder -> {
builder.addInclude("user") // 设置需要生成的表名
.addTablePrefix("t_"); // 设置需要过滤的表前缀
})
.execute();
}
}
4. DTO 和 VO 的实现
在生成的代码中,我们的实体类通常直接映射数据库表结构,但在许多情况下,我们需要 DTO 和 VO。
DTO(数据传输对象)
DTO 用于传输数据,通常用于服务间或网络间的数据交换。以下是一个简单示例:
package com.example.demo.dto;
import lombok.Data;
@Data
public class UserDTO {
private Long id;
private String username;
private String email;
}
VO(视图对象)
VO 通常用于向前端展示的数据,可能会与 DTO 略有不同。以下是一个简单示例:
package com.example.demo.vo;
import lombok.Data;
@Data
public class UserVO {
private Long id;
private String username;
private String email;
private String status; // 可能增加一些状态信息
}
5. 在 Service 层中使用 DTO 和 VO
服务层可以接收 DTO,并返回 VO。以下是一个简单的 Service 示例:
package com.example.demo.service;
import com.example.demo.dto.UserDTO;
import com.example.demo.vo.UserVO;
public interface UserService {
UserVO getUserById(Long id);
void createUser(UserDTO userDTO);
}
6. 总结
通过 MyBatis-Plus,我们可以高效地生成代码,并灵活地管理 DTO 和 VO。使用这样的方式,可以大大提高开发效率,减少重复代码。在实际开发中,建议根据需求合理设计 DTO 和 VO,确保应用程序高效、易维护。