如何使用 Spring Boot 和 MySQL 创建 Todo List API?
Spring Boot构建在spring之上,包含了spring的所有特性。如今,它正成为开发人员的最爱,因为它的快速生产就绪环境使开发人员能够直接专注于逻辑,而不是费力地进行配置和设置。Spring Boot 是一个基于微服务的框架,在其中创建一个可用于生产的应用程序只需很少的时间。在本文中,我们将使用 Spring Boot 和 MySQL创建一个简单的待办事项列表应用程序。
先决条件:
- 具有Java 基本知识。
- 有关 Spring Boot 的基础知识。
- 有关使用 SpringBoot 创建 REST API 的基础知识。
要在 Spring Boot 中创建应用程序,请确保您已清除前面列出的所有概念。
分步程序
项目依赖:
代码语言:javascript复制Project: Maven
Language: Java
Spring Boot: 3.0.0
Packaging: JAR
Java: 8
Dependencies: Spring Web, Spring Data JPA, MySQL Driver
第 1 步:
首先进入spring初始化程序并使用下面给出的以下数据创建一个新项目:
现在单击“生成” ,将下载一个.zip文件,这将是我们的启动项目。
第 2 步:
现在提取给定的文件夹,然后在您首选的 IDE 中打开该项目,这里我将使用 IntelliJ Idea Community 版本,要打开此入门项目,只需单击“打开”,然后从文件中选择提取的文件夹。
单击“确定”后,您将看到如下所示的屏幕。
注意:如果出现问题,您可以右键单击 pom.xml > maven > 重新加载项目,之后将进行一些处理,然后您就可以开始了。
第 3 步:
现在在以下文件夹中创建 4 个包 -> src > main > java > com.example.demo现在右键单击此文件夹 > 新建 > 包 > 命名 > 按 Enter 键
创建包
软件包如下:
- 控制器
- 服务
- 存储库
- 楷模
创建上面列出的包后,文件树将如下所示。
创建包后的文件树
第 4 步:
新建一个名为todolist的数据库,打开MySQL Command Line Client,然后执行命令
代码语言:javascript复制创建数据库待办事项列表;
MySQL 命令行客户端
创建该数据库后,我们将在将来使用它。
第 5 步:
现在我们将配置application.properties文件并添加以下信息,以便与数据库建立连接,在我们的例子中为MySQL,将用户名替换为您的 MySQL 的用户名(默认:root)并您帐户的密码应写入spring.datasource.password字段
application.properties 文件
如果您想复制给定的属性,请使用以下属性:
代码语言:javascript复制# This is the property to specify the database and the driver here todolist is database name and mysql is driver
spring.datasource.url=jdbc:mysql://localhost:3306/todolist
# These properties specify the data used for authentication and authorization for the database
spring.datasource.username= {use Your username here}
spring.datasource.password= {use Your password here}
# This property is used to specify how we'll handle data ex:- update -> update the remaining data,
# ex: create-drop -> everytime create new tables and delete on termination of the program
spring.jpa.hibernate.ddl-auto=update
# Driver Class for MySQL
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# This is used to show sql whenever any query is executed by hibernate
spring.jpa.show-sql: true
第 6 步:
现在我们已经设置了所有内容,我们将创建一个模型,它将帮助我们在数据库中创建一个表。我们将在models包中创建一个类,并将该类命名为Task.java,其中将包含以下数据
代码语言:javascript复制package com.example.demo.models;
import jakarta.persistence.*;
@Entity
public class Task {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
// this is the primary key which will be auto generated
private Long id;
private String task;
private boolean completed;
public Task(String task, boolean completed) {
this.task = task;
this.completed = completed;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTask() {
return task;
}
public void setTask(String task) {
this.task = task;
}
public boolean isCompleted() {
return completed;
}
public void setCompleted(boolean completed) {
this.completed = completed;
}
}
第 7 步:
现在我们将在包存储库中创建一个名为TaskRepository的接口,它将扩展接口 JPARepository<Task, Long>,这里 Task 是我们的模型,Long 是我们在 Task.java 中声明的主要 id 的数据类型文件
代码语言:javascript复制package com.example.demo.repositories;
import com.example.demo.models.Task;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface TaskRepository extends JpaRepository<Task, Long> {
public Task findByTask(String task);
public List<Task> findByCompletedTrue();
public List<Task> findByCompletedFalse();
public List<Task> findAll();
public Task getById(Long id);
}
第 8 步:
现在我们已经创建了存储库和模型,我们将创建服务类,并在该类中实现所有业务逻辑,因此在服务包中创建一个新类TaskService。
代码语言:javascript复制package com.example.demo.services;
import com.example.demo.models.Task;
import com.example.demo.repositories.TaskRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class TaskService {
@Autowired
private TaskRepository taskRepository;
public Task createNewTask(Task task) {
return taskRepository.save(task);
}
public List<Task> getAllTask() {
return taskRepository.findAll();
}
public Task findTaskById(Long id) {
return taskRepository.getById(id);
}
public List<Task> findAllCompletedTask() {
return taskRepository.findByCompletedTrue();
}
public List<Task> findAllInCompleteTask() {
return taskRepository.findByCompletedFalse();
}
public void deleteTask(Task task) {
taskRepository.delete(task);
}
public Task updateTask(Task task) {
return taskRepository.save(task);
}
}
第 9 步:
现在,在最后一步,我们将创建控制器来指定端点,然后执行任务,这里我们已经执行了所有 CRUD 应用程序,现在我们将对其进行测试。
代码语言:javascript复制package com.example.demo.controllers;
import com.example.demo.models.Task;
import com.example.demo.services.TaskService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Controller
@RequestMapping("/api/v1/tasks")
public class TaskController {
@Autowired
private TaskService taskService;
@GetMapping("/")
public ResponseEntity<List<Task>> getAllTasks() {
return ResponseEntity.ok(taskService.getAllTask());
}
@GetMapping("/completed")
public ResponseEntity<List<Task>> getAllCompletedTasks() {
return ResponseEntity.ok(taskService.findAllCompletedTask());
}
@GetMapping("/incomplete")
public ResponseEntity<List<Task>> getAllIncompleteTasks() {
return ResponseEntity.ok(taskService.findAllInCompleteTask());
}
@PostMapping("/")
public ResponseEntity<Task> createTask(@RequestBody Task task) {
return ResponseEntity.ok(taskService.createNewTask(task));
}
@PutMapping("/{id}")
public ResponseEntity<Task> updateTask(@PathVariable Long id, @RequestBody Task task) {
task.setId(id);
return ResponseEntity.ok(taskService.updateTask(task));
}
@DeleteMapping("/{id}")
public ResponseEntity<Boolean> getAllTasks(@PathVariable Long id) {
taskService.deleteTask(id);
return ResponseEntity.ok(true);
}
}
第10步:
现在通过打开ToDoListApplication.java并单击运行按钮来启动给定程序,这里我们有以下端点来执行以下任务,我们还将使用Postman向我们的服务器发出请求:
返回所有任务
代码语言:javascript复制GET /api/v1/tasks -> 返回所有任务
将新任务保存到数据库
代码语言:javascript复制POST /api/v1/tasks -> 将新任务保存到数据库
返回所有已完成任务的列表
代码语言:javascript复制GET /api/v1/tasks/completed -> 返回所有已完成任务的列表
返回所有未完成任务的列表
代码语言:javascript复制GET /api/v1/tasks/incomplete -> 返回所有未完成任务的列表
使用给定的 id 和详细信息更新任务
代码语言:javascript复制PUT /api/v1/tasks/id -> 使用给定的 id 和详细信息更新任务
从数据库中删除给定 id 的任务
代码语言:javascript复制DELETE /api/v1/tasks/id -> 从数据库中删除给定 id 的任务
最后我们创建了待办事项列表应用程序。