如何使用 Spring Boot 和 MySQL 创建 Todo List API?

2023-10-26 14:03:46 浏览数 (1)

如何使用 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 键

创建包

软件包如下:

  1. 控制器
  2. 服务
  3. 存储库
  4. 楷模

创建上面列出的包后,文件树将如下所示。

创建包后的文件树

第 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 的任务

最后我们创建了待办事项列表应用程序。

0 人点赞