专栏前言
作为一名前端开发,为了扩展自身技能,准备入门级的学习一下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类中分别定义name
和password
属性。
- 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
注意这里的属性列表是可以多选的
生成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
文件,右键运行。
启动成功,访问: http://localhost:8900/userInfo
:
遇到问题
报错:无法自动装配。找不到 'UserService' 类型的 Bean。
- 解决
实现类 UserServiceImpl
类前面必须加:@Service
注解!这样 Spring 能够将其识别为一个 Bean。
总结
至此,基于 maven
方式创建的 spring web
项目实现了第一个本地服务接口,也搞清楚了项目各个目录作用。