nest,java对比

同一个查询用户列表接口

  • 左边:Nest.js 写法
  • 右边:Java (SpringBoot + RuoYi 风格) 写法每层结构完全对应,你一眼就能看懂两套架构。

先给你终极结论(背会)

Nest 架构 ↔ SpringBoot (Java) 架构

  1. ControllerController
  2. ServiceService
  3. RepositoryMapper
  4. EntityDomain
  5. DTODTO

层数一模一样、思想一模一样、只是语法不一样!


一、Nest.js 完整查询接口

1. DTO(接收前端参数)

user.dto.ts

复制代码
export class UserListDto {
  username: string;
  page: number;
  size: number;
}

2. Entity(对应数据库表)

user.entity.ts

复制代码
@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  username: string;

  @Column()
  password: string;
}

3. Repository(数据库操作)

复制代码
@Injectable()
export class UserRepository extends Repository<User> {}

4. Service(业务逻辑)

复制代码
@Injectable()
export class UserService {
  constructor(private userRepository: UserRepository) {}

  async list(dto: UserListDto) {
    // 查询数据库
    return this.userRepository.find({
      where: { username: dto.username }
    });
  }
}

5. Controller(接口入口)

复制代码
@Controller('user')
export class UserController {
  constructor(private userService: UserService) {}

  @Get('list')
  list(@Query() dto: UserListDto) {
    return this.userService.list(dto);
  }
}

二、Java (SpringBoot) 完整查询接口

1. DTO(接收前端参数)

SysUserDto.java

复制代码
public class SysUserDto {
    private String username;
    private Integer page;
    private Integer size;
    // get set
}

2. Domain(对应数据库表)

SysUser.java

复制代码
public class SysUser {
    private Long id;
    private String username;
    private String password;
    // get set
}

3. Mapper(数据库操作)

SysUserMapper.java

复制代码
public interface SysUserMapper {
    List<SysUser> selectUserList(SysUserDto dto);
}

4. Service(业务逻辑)

SysUserServiceImpl.java

复制代码
@Service
public class SysUserServiceImpl implements SysUserService {

    @Autowired
    private SysUserMapper userMapper;

    @Override
    public List<SysUser> list(SysUserDto dto) {
        return userMapper.selectUserList(dto);
    }
}

5. Controller(接口入口)

SysUserController.java

复制代码
@RestController
@RequestMapping("/user")
public class SysUserController {

    @Autowired
    private SysUserService userService;

    @GetMapping("/list")
    public List<SysUser> list(SysUserDto dto) {
        return userService.list(dto);
    }
}

三、最清晰的分层对比表(一看就懂)

表格

层级 Nest.js Java (SpringBoot) 作用
接口层 Controller Controller 接收请求、返回结果
业务层 Service Service 写业务逻辑、调数据库
数据层 Repository Mapper 执行 SQL、操作数据库
实体层 Entity Domain 对应表结构、装数据
参数层 DTO DTO 接收前端参数

四、一句话总结

Nest 和 SpringBoot 架构完全一样!

  • 都是 Controller → Service → 数据操作 → 数据库
  • 都是 分层架构
  • 都是 面向对象 + 依赖注入
  • 只有语法不一样,思想 100% 相同

而且对应关系非常精准,我给你用最直白的方式对应一遍,你马上就能彻底打通 Java(RuoYi)和 Nest.js 的思维!

终极对应关系(1:1 完全匹配)

Java(RuoYi) ↔ Nest.js

Domain(实体)Entity(实体) Mapper(数据操作)Repository(仓库)


那你说的 DTO 对应什么?

你提到的 DTO 在 Nest 里是前端传参校验它在 RuoYi/Java 里对应的是:

Vo / Dto(前端入参对象)

不是 Domain!不是 Domain!


我给你画一张最清晰对照表

1. Domain = Entity

作用一模一样:

  • 对应数据库表

  • 定义字段结构

  • 用来存数据库数据

    // Java Domain
    public class SysUser {
    private Long id;
    private String username;
    }

    // Nest Entity
    @Entity()
    export class User {
    @PrimaryGeneratedColumn()
    id: number;

    复制代码
    @Column()
    username: string;

    }

完全一样:数据库映射对象


2. Mapper = Repository

作用一模一样:

  • 操作数据库

  • 增删改查

  • 把数据存入 Entity / Domain

    // Java Mapper
    public interface SysUserMapper {
    List selectList();
    }

    // Nest Repository
    @Injectable()
    export class UserService {
    constructor(
    @InjectRepository(User)
    private userRepository: Repository,
    ) {}

    复制代码
    findAll() {
      return this.userRepository.find();
    }

    }

完全一样:数据库操作工具


3. DTO(Nest)= Java 中的 DTO/VO

DTO 不对应 Domain,也不对应 Mapper DTO 是前端传进来的参数,只做校验、接收参数。

复制代码
// Nest DTO
export class CreateUserDto {
  @IsString()
  username: string;
}

// Java DTO(RuoYi 里也大量用)
public class SysUserDto {
    private String username;
}

作用一模一样:接收前端参数 + 校验


最终终极总结(背会就通了)

Java(RuoYi) ↔ Nest.js

  • Domain = Entity(数据库表结构)

  • Mapper = Repository(操作数据库)

  • DTO/VO = DTO(接收前端参数)


一句话秒懂

  • Domain/Entity:管数据长啥样
  • Mapper/Repository:管怎么存、怎么取
  • DTO:管前端传什么参数
相关推荐
z落落几秒前
C# ArrayList 动态集合(接口/区别/API/深浅拷贝)+ List<T> 泛型集合
开发语言·c#
Cx330❀1 分钟前
【Linux网络】从零构建高性能UDP服务器:从Echo到英译汉业务级实现
大数据·linux·服务器·开发语言·网络·c++·udp
basketball6162 分钟前
Golang:基础语法总结
开发语言·后端·golang
闪电悠米3 分钟前
黑马点评-优惠券秒杀-03_basic_seckill_and_oversell
java·数据库·spring boot·spring·缓存·oracle·面试
兰令水3 分钟前
leecodecode【双指针题2】【2026.5.26打卡-java版本】
java·开发语言·算法
不吃土豆的马铃薯4 分钟前
TCP 三次握手 / 四次挥手详解
服务器·开发语言·网络·c++·网络协议·tcp/ip
ch.ju5 分钟前
Java程序设计(第3版)第四章——引用
java·开发语言
霸道流氓气质6 分钟前
在Qoder中指定JDK和Maven运行AI学习的SpringBoot项目的完整指南
java·人工智能·maven
老码观察8 分钟前
设计模式实战解读(七):适配器模式——让不兼容的接口无缝协作
java·设计模式·适配器模式
garmin Chen8 分钟前
rabbitmq(1):核心机制与 SpringAMQP 详解
java·rabbitmq·java-rabbitmq