前端转 Java 后端,以前最烦的是搭环境——装 JDK、配 Maven、建数据库,代码还没写就劝退了。
现在让 AI 生成项目骨架,直接把后端概念翻译成语前端术语,门槛低了很多。
下面这个 Spring Boot 博客项目,7 个核心文件实现完整的增删改查。我用前端视角带你快速看懂。
先看整体结构
1 2 3 4 5 6 7 8 9
src/main/java/org/example/
├── Main.java ← 入口(相当于 index.js)
├── common/Result.java ← 统一响应格式
├── entity/Blog.java ← 数据实体
├── controller/
│ ├── BlogController.java ← REST API(返回 JSON)
│ └── BlogPageController.java← 页面路由(返回 HTML)
└── repository/
└── BlogRepository.java ← 数据访问层
第一个认知冲击:两行代码搞定数据库操作
1 2
public interface BlogRepository extends JpaRepository<Blog, Long> {
}
是的,就这两行。因为它继承了 JpaRepository,就自动拥有了 findAll()、findById()、save()、deleteById() 等方法。
前端类比:这就像你引入一个 api.ts 工具库,get/post/put/delete 全部封装好了,直接调用就行——只不过后端这个"工具库"是 Spring Data JPA 自动生成的。
数据模型 = TypeScript 的 interface
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
@Entity
@Table(name = "blog")
public class Blog {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String title;
@Column(nullable = false, columnDefinition = "TEXT")
private String content;
@Column(name = "create_time", updatable = false)
private LocalDateTime createTime;
// ... getter / setter
}
前端类比:这就是后端的 interface Blog。@Entity 注解告诉 JPA 把它映射成数据库表,@PrePersist 是数据入库前的"钩子"——类似 beforeSave。
统一响应格式:前后端的老朋友
1 2 3 4 5 6 7 8 9
public class Result<T> {
private int code;
private String message;
private T data;
public static <T> Result<T> success(T data) {
return new Result<>(200, "success", data);
}
}
前端开发看到这个一定很眼熟——code、message、data,这不就是每个项目都有的统一返回格式吗?
前端收到的 JSON 就是:
1
{ "code": 200, "message": "success", "data": { "id": 1, "title": "你好" } }
控制器:后端的"路由文件"
REST API 控制器返回 JSON,和前端对接:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
@RestController
@RequestMapping("/api/blogs")
public class BlogController {
private final BlogRepository blogRepository;
public BlogController(BlogRepository blogRepository) {
this.blogRepository = blogRepository;
}
@GetMapping
public Result<List<Blog>> list() {
return Result.success(blogRepository.findAll());
}
@PostMapping
public Result<Blog> create(@RequestBody Blog blog) {
return Result.success(blogRepository.save(blog));
}
@DeleteMapping("/{id}")
public Result<Void> delete(@PathVariable Long id) {
blogRepository.deleteById(id);
return Result.success();
}
}
关键注解对照:
@RestController | res.json() | |
@GetMapping | router.get() | |
@PathVariable | req.params.id | |
@RequestBody | req.body |
完整接口列表:
1 2 3 4 5
POST /api/blogs ← 新增
GET /api/blogs ← 列表
GET /api/blogs/{id} ← 详情
PUT /api/blogs/{id} ← 更新
DELETE /api/blogs/{id} ← 删除
页面控制器:返回 HTML 而不是 JSON
和 REST 接口不同,这个控制器返回的是 Thymeleaf 渲染的 HTML 页面:
1 2 3 4 5 6 7 8 9 10 11
@Controller
@RequestMapping("/blogs")
public class BlogPageController {
@GetMapping
public String list(Model model) {
List<Blog> blogs = blogRepository.findAll();
model.addAttribute("blogs", blogs);
return "blog/list"; // 渲染 blog/list.html
}
}
核心区别:@Controller 返回 HTML(服务端渲染),@RestController 返回 JSON(客户端渲染)。
Thymeleaf 模板里的语法,前端一看就懂:
1 2 3
<tr th:each="blog : ${blogs}">
<td th:text="${blog.title}"></td>
</tr>
th:each 就是 v-for,th:text 就是 {{ }}。只不过在服务端渲染后直接输出 HTML,浏览器拿到的是完整页面。
配置文件 = 后端的 .env
1 2 3 4 5 6 7 8 9
spring:
datasource:
url: jdbc:h2:mem:blogdb # 内存数据库,启动就用
h2:
console:
enabled: true # 可视化数据库面板
path: /h2-console
server:
port: 8080
H2 是内存数据库,不需要安装 MySQL,开发调试特别方便。/h2-console 相当于一个 Web 版的 Navicat。
从前端到后端的 3 个思维转变
1. 手动 import → 自动注入
前端你手动 import api from './api',后端通过构造函数注入,Spring 自动创建并传入:
1 2 3
public BlogController(BlogRepository blogRepository) {
this.blogRepository = blogRepository; // Spring 自动传入
}
2. 手动写 URL → 方法名即 SQL
后端不需要写 SQL,方法名就是查询逻辑:findByAuthor("张三") 自动翻译成 SELECT * FROM blog WHERE author = '张三'。
3. 客户端路由 → 服务端路由
前端用 Vue Router 控制页面切换,后端用 @Controller 返回不同 HTML 模板——一个在浏览器跳转,一个在服务器渲染。
数据流动全景
1
请求 → Controller(接收)→ Repository(查库)→ Entity(映射)→ 返回 JSON/HTML
这就是经典的三层架构:Controller → Service → Repository。
运行方式
1
mvn spring-boot:run
启动后访问:
• 博客页面:http://localhost:8080/blogs • REST API:http://localhost:8080/api/blogs • H2 控制台:http://localhost:8080/h2-console
前端转后端,最难的不是 Java 语法,而是理解后端的思维模式:请求怎么流转、数据怎么持久化、异常怎么处理。
以前这些概念需要翻书查文档,现在有了 AI 辅助——你可以让 AI 帮你逐行解释代码、把 Java 概念翻译成前端熟悉的术语、甚至直接生成可运行的项目骨架。AI 不会替你学习,但它能让学习曲线从陡峭变成平滑。
通过这样一个"麻雀虽小五脏俱全"的项目,前端开发者能用自己熟悉的视角——实体=组件、控制器=路由、Repository=API 封装——快速建立起对 Java 后端的直觉。
夜雨聆风