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:管前端传什么参数
相关推荐
什巳1 小时前
JAVA练习278- 和为 K 的子数组
java·学习·算法·leetcode
豆瓣鸡1 小时前
RocketMQ学习-Spring Boot消息实践
java·spring boot·rocketmq
喜欢的名字被抢了1 小时前
Python实战:SQLAlchemy ORM与FastAPI项目集成
开发语言·python·sql·教程·fastapi
罗超驿2 小时前
2.算法效率的核心密码:时间复杂度和空间复杂度详解
java·数据结构·算法
栈溢出了3 小时前
Redis 分片集群与哈希槽笔记
java·redis·笔记·spring
遨游DATA3 小时前
Spring Boot 启动失败排查:如何区分多 Bean 冲突与清理阶段异常
java·spring boot·后端
从零开始的代码生活_4 小时前
C++ 内存管理:从内存分区到 new/delete 底层原理
开发语言·c++·后端
wabs6664 小时前
关于单调栈【力扣739.每日温度的思考】
java·开发语言
AOwhisky4 小时前
Python 学习笔记(第三期)——流程控制核心知识点自测与详解
开发语言·笔记·python·学习·云原生·运维开发·流程控制
雪碧聊技术4 小时前
为什么要学函数式编程?
java·函数式编程