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:管前端传什么参数
相关推荐
维吉斯蔡5 小时前
【VS Code / Cursor】文件夹右键快捷打开与文件类型自动关联
开发语言·程序人生·学习方法
蓝斯4976 小时前
[原创]《C#高级GDI+实战:从零开发一个流程图》第章:增加贝塞尔曲线,上、下、左、右连接点
java·c#·流程图
前端工作日常6 小时前
我学习到的Java 的 Service 分层:itf 和 impl 到底是什么?
java·后端
都叫我大帅哥7 小时前
Spring @Transactional 注解完全指南
java·spring
Java成神之路-7 小时前
G1 垃圾回收器 :SATB + TAMS核心机制深度解析
java·jvm
前端工作日常7 小时前
我学习到的JIT即时编译与机器码缓存失效
java·后端
带刺的坐椅7 小时前
Solon 的 10 种 HTTP 服务器:改一行依赖,换一个引擎
java·solon·jetty·undertow·mcp-server·htttp
luj_17687 小时前
星火科技助力边远地区防病攻坚
c语言·开发语言·c++·经验分享·算法
always_TT8 小时前
【Python 日志记录:logging 模块入门】
开发语言·python·php
xcLeigh8 小时前
Go入门:变量声明的五种方式详解
java·开发语言·golang