📜  门| GATE MOCK 2017 |第42章(1)

📅  最后修改于: 2023-12-03 15:28:40.750000             🧑  作者: Mango

门 | GATE MOCK 2017 |第42章

简介

GATE MOCK 2017是一个模拟GATE考试的项目,第42章主题为“门”。本项目旨在帮助计算机科学领域的学生练习他们的编程和算法技能,测试他们的思维能力和解决问题的能力。

任务描述

任务是设计和实现一个门控制系统。系统需要支持以下操作:

  1. 添加门:可以添加单个或多个门,每个门有一个唯一的ID。
  2. 删除门:可以删除单个或多个门,通过门的ID删除。
  3. 指定门的状态:每个门都有一个状态,可以是打开或关闭状态。
  4. 获取门的状态:通过门的ID获取门的状态。
  5. 获取门的列表:获取所有门的列表。
实现

本项目的实现使用Java编写,使用Spring Boot作为应用程序框架,使用JPA作为数据持久化层。以下是应用程序中的关键实现细节:

模型类

定义门的模型类Door:

@Entity
@Data
public class Door {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @NonNull
    private String name;

    private boolean isOpen;
}
存储库

定义存储库接口DoorRepository:

public interface DoorRepository extends JpaRepository<Door, Long> {

    List<Door> findAll();
}
服务

定义门控制服务DoorService:

@Service
@AllArgsConstructor
public class DoorService {

    private DoorRepository doorRepository;

    public Door addDoor(Door door) {
        return doorRepository.save(door);
    }

    public void deleteDoor(Long id) {
        doorRepository.deleteById(id);
    }

    public void setDoorState(Long id, boolean isOpen) {
        Door door = doorRepository.findById(id).orElseThrow(IllegalArgumentException::new);
        door.setOpen(isOpen);
        doorRepository.save(door);
    }

    public boolean getDoorState(Long id) {
        return doorRepository.findById(id)
                              .map(Door::isOpen)
                              .orElseThrow(IllegalArgumentException::new);
    }

    public List<Door> getDoorList() {
        return doorRepository.findAll();
    }
}
控制器

定义门控制的REST API DoorController:

@RestController
@RequestMapping("/doors")
@AllArgsConstructor
public class DoorController {

    private DoorService doorService;

    @PostMapping
    public Door addDoor(@RequestBody Door door) {
        return doorService.addDoor(door);
    }

    @DeleteMapping("/{id}")
    public void deleteDoor(@PathVariable Long id) {
        doorService.deleteDoor(id);
    }

    @PutMapping("/{id}")
    public void setDoorState(@PathVariable Long id, @RequestBody boolean isOpen) {
        doorService.setDoorState(id, isOpen);
    }

    @GetMapping("/{id}")
    public boolean getDoorState(@PathVariable Long id) {
        return doorService.getDoorState(id);
    }

    @GetMapping
    public List<Door> getDoorList() {
        return doorService.getDoorList();
    }
}
总结

本项目展示了如何使用Spring Boot和JPA实现一个门控制系统。本项目包括模型类,存储库,服务和REST API。通过这个例子,可以学习到如何使用Spring Boot和JPA开发可扩展的Web应用程序。