前端入门JAVA:Spring-web项目实现第一个本地接口

187 阅读6分钟

专栏前言

作为一名前端开发,为了扩展自身技能,准备入门级的学习一下java后端相关知识。虽然岗位是前端,但我觉得不能算是卷。

因为我们日常开发中几乎每天都要和后端同学打交道,如果能够掌握后端基本知识的话,我相信在前端开发工作中也会有很大作用。 技多不压身,如果这个过程让你感到痛苦那大可不必;反之,学习新事物的过程中能让自己更加自信、有成就感时,我觉得是有意义的!

记得是2年前学习过一个入门级的java项目,但现在可以说是忘记的差不多了。最近打算从0开始学习,并输出文章,方便自己日后复习查阅,也希望帮助到其他同学。

开发环境

  • jdk17
  • ide 2023
  • springBoot 2.6.13
  • maven 3.9.2

概念相关

Spring-web项目目录结构

spring-web-project

│
├── src/
│   ├── main/  # 主代码目录,包含应用的生产代码。
│   │   ├── java/
│   │   │   └── com/
│   │   │       └── example/
│   │   │           └── myproject/  # 按包结构组织的 Java 代码。这里的 `com.example.myproject` 是包名,可以根据实际项目需求进行调整。
│   │   │               ├── controller/        # 控制器层,处理 HTTP 请求
│   │   │               ├── service/           # 服务层,包含业务逻辑
│   │   │               ├── repository/        # 数据访问层,处理数据库交互
│   │   │               ├── entity/            # 实体类,表示数据库表
│   │   │               └── MySpringWebApplication.java  # 主类,使用 `@SpringBootApplication` 注解,启动 Spring Boot 应用
│   │   ├── resources/
│   │   │   ├── application.properties      # 应用程序的配置文件,包含数据库连接、日志级别等配置
│   │   │   ├── static/                     # 静态资源(如 CSS、JS、图片)
│   │   │   ├── templates/                  # 视图模板,如果使用 Thymeleaf、Freemarker 或其他模板引擎,这里存放相应的模板文件
│   │   │   └── public/                     # 公开的静态资源,任何人都可以直接访问的文件
│   │   └── webapp/                         # 可选,传统的 web 应用文件夹(如 JSP 文件)
│   └── test/                               # 测试代码
│       └── java/ # 测试用的 Java 源代码目录,通常与 `main/java` 的结构相同
│           └── com/
│               └── example/
│                   └── myproject/
│                       └── MySpringWebApplicationTests.java # 测试类,用于编写单元测试和集成测试
│
├── pom.xml            # Maven 项目的配置文件,定义了项目的依赖、构建信息和插件等
└── README.md          # 项目说明文件

entity 包(实体类)

包含实体类,通常映射到数据库表。每一个Java类对应于数据库中的一个表。

这里存放业务逻辑所需要的对象属性或方法。比如要获取用户信息,而用户信息包含名称和密码这两个属性,就需要在这里定义和创建,并同时定义 set 方法用于赋值,定义 get 方法用于取值。

service 包(业务逻辑层)

包含业务逻辑层的类,处理系统的核心业务逻辑。
service目录也就是提供服务的类,有了对象,接下来就要使用对象,实现功能,定义接口。定义接口之后还需要一个实现类,来实现接口。

controller 包(界面层)

包含所有的控制器类,负责处理 HTTP 请求和响应。
提供了服务之后就要开始使用服务,也就是调用服务类所提供的方法来返回最终的数据。

resources 包(数据访问层)

包含数据访问层的接口和实现,负责与数据库交互。
mybatis主配置文件、spring配置文件、jdbc外部属性配置文件

Spring-web项目实现第一个本地接口

在实现接口前,首先需要在项目目录下新建最关键的三个文件包: entity、service、controller

一、创建实体类

首先在entity目录下创建一个 User类,表示用户信息。 User类中分别定义 namepassword 属性。

  • User.java
package com.example.demomaven.entity;
public class User {
    String name;
    int password;
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getPassword() {
        return password;
    }

    public void setPassword(int password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "user{password=" + password + ", name='" + name + "'}";
    }
}

这块 get、set方法不用手动一行一行去敲的,ide可以快捷键生成对应属性的 get、set函数,以及构造函数等。

生成类getter、setter方法

  • 首先定义好name、password属性
  • 右键生成 getter、setter image.png

注意这里的属性列表是可以多选的

image.png

生成toString方法

为什么需要在实体类中加 toString 方法?

重写 toString,object类里的toString只是把字符串的直接打印,数字的要转化成字符再打印,而对象,则直接打印该对象的hash码。 

如果在类中没有重写 toString方法,默认使用的是Object的toString方法输出格式。这个时候,对象就会直接显示hash码。 

在类中重写toString是对对象在打印输出时候的一种格式化。这样做符合业务逻辑,当你print一个对象是你需要这个对象在打印时展现的是什么形态你就把toString重写成你需要的返回形态。

同样也是可以右键快速生成 toString 方法, 当然具体需要打印什么也可以自定义。

二、创建 Repository(存储库)接口

repository 目录包含数据访问层的接口和实现,负责与数据库交互。 创建一个接口,用于与数据库的交互。

因为本章我们只实现本地接口,不连接服务器,所以这一步先跳过。

三、创建 Service 接口、实现类

service目录下新建 UserService 接口,在 UserService 接口中定义 getUserInfo 方法。

  • UserService.java
package com.example.demomaven.service;

import com.example.demomaven.entity.User;

// 定义 UserService 接口, getUserInfo方法
public interface UserService {
    public User getUserInfo();
}

然后在 service 文件包中新建 impl 文件包,在 impl 文件包中新建 UserServiceImpl 来实现 UserService接口

实现类 UserServiceImpl

实现 UserService 接口

  • UserServiceImpl.java

package com.example.demomaven.service.impl;

import org.springframework.stereotype.Service;
import com.example.demomaven.entity.User;
import com.example.demomaven.service.UserService;

// 实现 UserService 接口的类时,这里必须加上 @Service
@Service
public class UserServiceImpl implements UserService {
    @Override
    public User getUserInfo() {
        User user = new User();
        user.setName("张三");
        user.setPassword(666666);
        return user;
    }
}

四、创建 Controller

controller文件包下新建 UserController 类,定义接口路径,返回接口数据。创建一个 UserController 类,处理用户请求。

  • UserController.java
package com.example.demomaven.controller;

import com.example.demomaven.entity.User;
import com.example.demomaven.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {
    @Autowired
    private UserService service; // 正确注入 UserService
    @RequestMapping(value = "/userInfo",method = RequestMethod.GET)
    public String getUserItem(){
        User user = service.getUserInfo(); // 调用 UserService 方法获取用户信息
        return user.toString();
    }
}

五、启动应用

创建一个主应用类来启动 Spring Boot 应用。 我们的项目是使用 maven创建的,根目录下有一个主应用类 xxxApplication文件,右键运行。

image.png

启动成功,访问: http://localhost:8900/userInfo:

image.png

遇到问题

报错:无法自动装配。找不到 'UserService' 类型的 Bean。

image.png

  • 解决

实现类 UserServiceImpl 类前面必须加:@Service注解!这样 Spring 能够将其识别为一个 Bean。

image.png

总结

至此,基于 maven 方式创建的 spring web 项目实现了第一个本地服务接口,也搞清楚了项目各个目录作用。