0 项目概述
TinyBlog 是一个博客系统,正如其名 Tiny,它是一个极其微小小小小小小👌的博客系统,定位是一个用于学习各种技术的 Demo 应用😀。
本文主要是实现其最最基础的后端接口(CRUD),支持新增博客、查询博客、修改博客和删除博客。后续接口功能按需添加~这是一个前后端分离的项目,因此本文只涉及后端接口部分。
1 项目设计
1.1 表结构设计
目前先考虑最基础的博客功能,只设计了 blog
表,以及基础的几个字段。
1.2 接口设计
先提供最基础的 CRUD 的 RESTFul 接口,后续需要再补充。
请求 | URL | 接口说明 |
---|---|---|
POST | /api/blog | 创建一篇博客 |
GET | /api/blog | 获取所有博客 |
GET | /api/blog/:id | 获取 id 为 :id 的博客 |
PUT | /api/blog/:id | 更新 id 为 :id 的博客 |
DELETE | /api/blog/:id | 删除 id 为 :id 的博客 |
1.3 技术栈
- Java 8
- Spring Boot, Spring MVC, Spring Data JDBC
- MySQL
1.4 开发工具
- IDEA, Postman, Navicat, VS Code
2 环境搭建
2.1 准备数据库环境
创建 tinyblog
库,然后创建 blog
表。
-- 创建 tinyblog 库
CREATE DATABASE `tinyblog` CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';
-- 创建 blog 表
CREATE TABLE `blog` (
`id` bigint(0) NOT NULL AUTO_INCREMENT,
`title` varchar(255) NULL,
`description` varchar(255) NULL,
`status` int(255) NULL,
`content` varchar(255) NULL,
PRIMARY KEY (`id`)
);
2.2 创建项目工程
新建 IDEA 工程,选择通过 Spring Initializr 初始化项目。
填入项目信息。
选择项目依赖。
2.3 项目配置
字符编码、Maven 配置(Maven 建议更换为自己的 Maven 替换国内的镜像)这些都不说了,先检查一下。
然后打开 pom.xml 检查一下,确保有这几个依赖。
打开 application.properties
配置上我们的数据库信息。
3 编写代码
开发环境准备好之后,接下来就是编写代码了。我们按照 Entity -> DAO -> Service -> Controller 的顺序,自底向上地的编写代码。
3.1 创建数据模型
首先,我们新建 model
包,并新增我们的实体类 Blog
。
3.2 创建 DAO
接着我们创建 repository
包,新增 DAO(Data Access Object) 接口 BlogDao
,以及其实现类 JdbcBlogDao
。
里面定义了我们接口将会用到的,针对数据库的 CRUD 操作。
3.3 创建 Service
Service 层通常作为我们实现业务逻辑的地方。虽然目前 TinyBlog 的业务逻辑十分简单,但是我们还是创建 service 包,以及 BlogService 接口及其实现类 BlogServiceImpl,其中我们将会调用刚刚创建的 Dao 完成数据库操作,提供一个完整增删改查服务。
3.4 创建 Controller
最后就是创建 Controller,提供对外的 RESTFul 接口。
完整的项目结构如下。
完整代码可以在 Gitee https://gitee.com/noissues/tinyblog-springboot-jdbctemplate.git
获取。
4 运行 & 测试
运行项目,打开 Postman 对我们开发的接口进行测试。
4.1 创建博客接口
使用 Postman 调用接口创建博客。
检查数据库,记录插入成功。
4.2 查询博客接口
1 查询所有博客
不加任何参数的查询接口,将会查询出所有的数据。
2 根据 ID 查询博客
注意还应该测试 ID 查询不到的情况,然后就发现了,JdbcTemplate 的 queryForObject方法,当查不到数据时会抛出 EmptyResultDataAccessException 异常。因此需要针对这个查询进行异常处理。
3 根据标题查询博客
4.3 更新博客接口
更新博客接口支持增量更新,也就是说可以只修改博客的状态或者标题等。
这里有个注意的是,一开始使用了 Spring 的 BeanUtil 拷贝。这样写是有问题的,因为它不会过滤掉值为 null 的属性,而我们需要的是增量更新。
于是参考了网上的做法,自己实现了一个忽略 Null 值的拷贝方法。
然后调用更新接口,也是 OK 的。
4.4 删除博客接口
删除指定 id 的博客。
5 总结
本文主要采用 Spring Boot + JdbcTemplate 实现了一个简单的博客系统,提供了 CRUD 的 RESTFul 接口,使用了 MySQL 作为持久化存储,实现了最基础的增删改查功能。
最后,如果有什么想法或者建议,欢迎评论区留言。