当前位置: 首页 > article >正文

Spring Boot 项目开发流程全解析

目录

引言

一、开发环境准备

二、创建项目

三、项目结构

四、开发业务逻辑

1.创建实体类:

2.创建数据访问层(DAO):

3.创建服务层(Service):

4.创建控制器层(Controller):

五、配置文件

1.application.properties 或 application.yml:

2.日志配置:

六、测试

1.单元测试:

2.集成测试:

七、部署

1.打包项目:

2.部署方式:

总结:


引言

在当今的 Java 开发领域,Spring Boot 以其便捷、高效的特性成为了众多开发者的首选。本文将详细介绍 Spring Boot 完整的项目开发流程,并突出关键要点。

一、开发环境准备

  1. 1.安装 JDK:确保安装了合适版本的 Java Development Kit(JDK),Spring Boot 通常需要 JDK 8 及以上版本。

  2. 2.安装 IDE:如 IntelliJ IDEA 或 Eclipse,这些集成开发环境提供了丰富的功能,方便开发 Spring Boot 项目。

  3. 3.配置 Maven 或 Gradle:Spring Boot 项目可以使用 Maven 或 Gradle 进行构建管理。确保在开发环境中正确配置了构建工具,并了解其基本使用方法。

  4. 二、创建项目

    1. 使用 Spring Initializr:Spring Initializr 是一个快速创建 Spring Boot 项目的工具。可以通过访问Spring Initializr 官网或者在 IDE 中使用插件来创建项目。选择项目配置:在创建项目时,需要选择项目的基本信息,如项目名称、包名、依赖等。根据项目需求选择合适的依赖,例如 Web 开发可以选择 spring-boot-starter-web。

    2. 三、项目结构

      1.目录结构:

      src/main/java:存放 Java 源代码。

      src/main/resources:存放配置文件、静态资源等。

      src/test/java:存放测试代码。

      src/test/resources:存放测试资源文件。

      2.关键文件:

      application.properties 或 application.yml:项目的配置文件,可以配置数据库连接、日志级别等。

      pom.xml(Maven)或 build.gradle(Gradle):项目的构建文件,用于管理项目依赖。

    3. 四、开发业务逻辑

      1.创建实体类:

    4. 根据业务需求创建实体类,通常使用 Java 对象来表示数据库中的表。

    5. 例如:

    6. package com.example.demo.entity;

    7. import javax.persistence.Entity;

    8. import javax.persistence.GeneratedValue;

    import javax.persistence.GenerationType;
    
    import javax.persistence.Id;
    
    1. @Entity
    public class User {
    
    @Id
    
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    
    private Long id;
    
    private String name;
    
    private String email;
    
    // 构造函数、getter 和 setter 方法
    
    }
    
    ### 2.创建数据访问层(DAO):
    
    1. 使用 Spring Data JPA 或其他数据库访问技术创建数据访问层,实现对数据库的操作。

    2. 例如:

    package com.example.demo.repository;
    
    import com.example.demo.entity.User;
    
    import org.springframework.data.jpa.repository.JpaRepository;
    
    public interface UserRepository extends JpaRepository<User, Long> {
    
    }
    
    ### 3.创建服务层(Service):
    
    1. 在服务层实现业务逻辑,调用数据访问层进行数据库操作。

    2. 例如:

    1.package com.example.demo.service;
    
    1. import com.example.demo.entity.User;
    import java.util.List;
    
    public interface UserService {
    
    User saveUser(User user);
    
    User getUserById(Long id);
    
    List<User> getAllUsers();
    
    void deleteUser(Long id);
    
    }
    
    1. 2.package com.example.demo.service.impl;
    import com.example.demo.entity.User;
    
    import com.example.demo.repository.UserRepository;
    
    import com.example.demo.service.UserService;
    
    import org.springframework.beans.factory.annotation.Autowired;
    
    import org.springframework.stereotype.Service;
    
    import java.util.List;
    
    @Service
    
    public class UserServiceImpl implements UserService {
    
    @Autowired
    
    private UserRepository userRepository;
    
    @Override
    
    public User saveUser(User user) {
    
    return userRepository.save(user);
    
    }
    
    @Override
    
    public User getUserById(Long id) {
    
    return userRepository.findById(id).orElse(null);
    
    }
    
    @Override
    
    public List<User> getAllUsers() {
    
    return userRepository.findAll();
    
    }
    
    @Override
    
    public void deleteUser(Long id) {
    
    userRepository.deleteById(id);
    
    }
    
    }
    
    ### 4.创建控制器层(Controller):
    
    1. 创建控制器类,处理 HTTP 请求,调用服务层实现业务逻辑,并返回响应结果。

    2. 例如:

    package com.example.demo.controller;
    
    import com.example.demo.entity.User;
    
    import com.example.demo.service.UserService;
    
    import org.springframework.beans.factory.annotation.Autowired;
    
    import org.springframework.http.HttpStatus;
    
    import org.springframework.http.ResponseEntity;
    
    import org.springframework.web.bind.annotation.\*;
    
    import java.util.List;
    
    @RestController
    
    @RequestMapping("/users")
    
    public class UserController {
    
    @Autowired
    
    private UserService userService;
    
    @PostMapping
    
    public ResponseEntity<User> saveUser(@RequestBody User user) {
    
    User savedUser = userService.saveUser(user);
    
    return new ResponseEntity<>(savedUser, HttpStatus.CREATED);
    
    }
    
    @GetMapping("/{id}")
    
    public ResponseEntity<User> getUserById(@PathVariable Long id) {
    
    User user = userService.getUserById(id);
    
    if (user!= null) {
    
    return new ResponseEntity<>(user, HttpStatus.OK);
    
    } else {
    
    return new ResponseEntity<>(HttpStatus.NOT\_FOUND);
    
    }
    
    }
    
    @GetMapping
    
    public ResponseEntity<List<User>> getAllUsers() {
    
    List<User> users = userService.getAllUsers();
    
    return new ResponseEntity<>(users, HttpStatus.OK);
    
    }
    
    @DeleteMapping("/{id}")
    
    public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
    
    userService.deleteUser(id);
    
    return new ResponseEntity<>(HttpStatus.NO\_CONTENT);
    
    }
    
    }
    
    1. 五、配置文件
    ------
    
    ### 1.application.properties 或 application.yml:
    
    1. 可以在配置文件中配置数据库连接、服务器端口、日志级别等。

    2. 例如:

    server.port=8080
    
    spring.datasource.url=jdbc:mysql://localhost:3306/mydb
    
    spring.datasource.username=root
    
    spring.datasource.password=password
    
    spring.jpa.hibernate.ddl-auto=update
    
    ### 2.日志配置:
    
    1. 可以配置日志级别、输出格式等,以便在开发和生产环境中更好地跟踪问题。

    2. 例如:

    logging.level.root=INFO
    
    logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} \[%thread\] %-5level %logger{36} - %msg%n
    
    1. 六、测试

    ----
    
    ### 1.单元测试:
    
    1. 使用 JUnit 和 Mockito 等测试框架编写单元测试,测试业务逻辑的各个部分。

    2. 例如:

    package com.example.demo.service.impl;
    
    import com.example.demo.entity.User;
    
    import com.example.demo.repository.UserRepository;
    
    import org.junit.jupiter.api.BeforeEach;
    
    import org.junit.jupiter.api.Test;
    
    import org.mockito.InjectMocks;
    
    import org.mockito.Mock;
    
    import org.mockito.MockitoAnnotations;
    
    import java.util.Optional;
    
    import static org.junit.jupiter.api.Assertions.assertEquals;
    
    import static org.mockito.Mockito.when;
    
    class UserServiceImplTest {
    
    @InjectMocks
    
    private UserServiceImpl userService;
    
    @Mock
    
    private UserRepository userRepository;
    
    @BeforeEach
    
    void setUp() {
    
    MockitoAnnotations.initMocks(this);
    
    }
    
    @Test
    
    void saveUser() {
    
    User user = new User();
    
    user.setName("John");
    
    user.setEmail("john@example.com");
    
    when(userRepository.save(user)).thenReturn(user);
    
    User savedUser = userService.saveUser(user);
    
    assertEquals(user.getName(), savedUser.getName());
    
    assertEquals(user.getEmail(), savedUser.getEmail());
    
    }
    
    @Test
    
    void getUserById() {
    
    Long id = 1L;
    
    User user = new User();
    
    user.setId(id);
    
    user.setName("John");
    
    user.setEmail("john@example.com");
    
    when(userRepository.findById(id)).thenReturn(Optional.of(user));
    
    User foundUser = userService.getUserById(id);
    
    assertEquals(user.getName(), foundUser.getName());
    
    assertEquals(user.getEmail(), foundUser.getEmail());
    
    }
    
    }
    
    ### 2.集成测试:
    
    1. 编写集成测试,测试整个应用的功能。可以使用 Spring Boot 的测试框架,如 @SpringBootTest 注解。

    2. 例如:

    package com.example.demo;
    
    import com.example.demo.controller.UserController;
    
    import com.example.demo.entity.User;
    
    import com.example.demo.service.UserService;
    
    import org.junit.jupiter.api.BeforeEach;
    
    import org.junit.jupiter.api.Test;
    
    import org.springframework.beans.factory.annotation.Autowired;
    
    import org.springframework.boot.test.context.SpringBootTest;
    
    import org.springframework.boot.test.web.client.TestRestTemplate;
    
    import org.springframework.http.HttpEntity;
    
    import org.springframework.http.HttpMethod;
    
    import org.springframework.http.HttpStatus;
    
    import org.springframework.http.ResponseEntity;
    
    import java.util.List;
    
    import static org.junit.jupiter.api.Assertions.assertEquals;
    
    import static org.junit.jupiter.api.Assertions.assertNotNull;
    
    @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM\_PORT)
    
    class DemoApplicationTests {
    
    @Autowired
    
    private UserController userController;
    
    @Autowired
    
    private UserService userService;
    
    @Autowired
    
    private TestRestTemplate restTemplate;
    
    @BeforeEach
    
    void setUp() {
    
    userService.deleteAll();
    
    }
    
    @Test
    
    void contextLoads() {
    
    }
    
    @Test
    
    void saveUser() {
    
    User user = new User();
    
    user.setName("John");
    
    user.setEmail("john@example.com");
    
    HttpEntity<User> request = new HttpEntity<>(user);
    
    ResponseEntity<User> response = restTemplate.postForEntity("/users", request, User.class);
    
    assertEquals(HttpStatus.CREATED, response.getStatusCode());
    
    assertNotNull(response.getBody());
    
    assertEquals(user.getName(), response.getBody().getName());
    
    assertEquals(user.getEmail(), response.getBody().getEmail());
    
    }
    
    @Test
    
    void getUserById() {
    
    User user = new User();
    
    user.setName("John");
    
    user.setEmail("john@example.com");
    
    User savedUser = userService.saveUser(user);
    
    ResponseEntity<User> response = restTemplate.getForEntity("/users/{id}", User.class, savedUser.getId());
    
    assertEquals(HttpStatus.OK, response.getStatusCode());
    
    assertNotNull(response.getBody());
    
    assertEquals(user.getName(), response.getBody().getName());
    
    assertEquals(user.getEmail(), response.getBody().getEmail());
    
    }
    
    @Test
    
    void getAllUsers() {
    
    User user1 = new User();
    
    user1.setName("John");
    
    user1.setEmail("john@example.com");
    
    User savedUser1 = userService.saveUser(user1);
    
    User user2 = new User();
    
    user2.setName("Jane");
    
    user2.setEmail("jane@example.com");
    
    User savedUser2 = userService.saveUser(user2);
    
    ResponseEntity<List> response = restTemplate.getForEntity("/users", List.class);
    
    assertEquals(HttpStatus.OK, response.getStatusCode());
    
    assertNotNull(response.getBody());
    
    assertEquals(2, response.getBody().size());
    
    }
    
    @Test
    
    void deleteUser() {
    
    User user = new User();
    
    user.setName("John");
    
    user.setEmail("john@example.com");
    
    User savedUser = userService.saveUser(user);
    
    restTemplate.delete("/users/{id}", savedUser.getId());
    
    ResponseEntity<User> response = restTemplate.getForEntity("/users/{id}", User.class, savedUser.getId());
    
    assertEquals(HttpStatus.NOT\_FOUND, response.getStatusCode());
    
    }
    
    }
    
    1.  七、部署
        ----
        
        ### 1.打包项目:
        
    2.  使用 Maven 或 Gradle 打包项目,生成可执行的 JAR 或 WAR 文件。
        
        ### 2.部署方式:
        
    3.  可以将打包后的文件部署到服务器上,如 Tomcat、Jetty 等,或者使用容器化技术,如 Docker。
        
    4.  总结:
        ---
        
        1.  Spring Boot 项目开发流程涵盖了从环境准备到部署的各个环节,通过合理的规划和实践,可以高效地开发出稳定、可靠的应用程序。在开发过程中,关键要点包括正确选择依赖、合理设计项目结构、编写高质量的测试代码以及灵活配置项目。希望本文对大家在 Spring Boot 项目开发中有所帮助
    

http://www.kler.cn/a/556945.html

相关文章:

  • 计算机视觉(CV)
  • 领略算法真谛:倍增思想
  • Safari 插件开发流程
  • 学习整理安装php的uuid扩展以及uuid调用方法
  • 启元世界(Inspir.ai)技术浅析(八):AI 数值设计
  • 【CXX】4 跨平台构建系统特性对比
  • git 克隆及拉取github项目到本地微信开发者工具,微信开发者工具通过git commit、git push上传代码到github仓库
  • Day7 25/2/20 THU
  • 负载均衡 LVS vs Nginx 对比
  • 【Blender】二、建模篇--05,阵列修改器与晶格形变
  • 如何在本地和服务器新建mysql用户和密码
  • JavaScript中有哪些实现多线程的方式?
  • 网络安全服务实施流程管理 网络安全服务体系
  • Canvas进阶-4、边界检测(流光,鼠标拖尾)
  • R 语言科研绘图第 26 期 --- 密度图-基础
  • 基于Spring Boot的RabbitMQ延时队列技术实现
  • 项目中一些不理解的问题
  • GoLang 协程泄漏的原因可能是什么?
  • 【leetcode】【动态规划】杨辉三角2
  • C#上位机--流程控制(IF语句)