【Java 实训从零开始】图书管理系统 SpringBoot 完整搭建流程 + 新手踩坑全记录
【Java 实训从零开始】图书管理系统 SpringBoot 完整搭建流程 + 新手踩坑全记录
一、项目整体介绍
本次实训做的是简易图书管理系统,技术栈:后端 SpringBoot+Java,数据库 MySQL8.0,前端 HTML/CSS/JS,开发工具 IDEA2024、Navicat。系统分为管理员、学生读者两个角色,实现图书增删改查、借书还书、逾期罚款、数据统计全套业务。本篇完整记录从零搭建项目环境、初始化框架的全部步骤,同时整理我搭建时踩过的所有 bug,给同实训的同学避坑。
二、前置环境准备
- 软件安装
JDK1.8 配置:提前配置环境变量,cmd 输入java -version验证版本,必须保证 JDK 版本和 SpringBoot 匹配,我选用 SpringBoot2.7.x 适配 JDK8。
MySQL8.0 安装:本地安装 MySQL,设置端口 3306,root 账号密码自定义,Navicat 用来可视化管理数据库。
IDEA 开发工具:导入 Maven 依赖,配置本地 Maven 仓库,避免下载依赖缓慢。
浏览器:Chrome 用来调试前端页面。 - 数据库初始化准备
打开 Navicat,新建数据库library,字符集 utf8,排序规则utf8_general_ci。
提前创建 4 张核心表:admin 管理员表、book 图书表、reader 读者表、borrow 借阅记录表,附上建表 SQL 片段:
-- 1. 管理员表 (admin)
CREATE TABLE IF NOT EXISTS admin (
admin_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '管理员编号',
username VARCHAR(50) NOT NULL COMMENT '登录账号',
password VARCHAR(100) NOT NULL COMMENT '登录密码',
real_name VARCHAR(50) COMMENT '姓名',
phone VARCHAR(20) COMMENT '联系电话'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='管理员信息表';
-- 2. 读者表 (reader)
CREATE TABLE IF NOT EXISTS reader (
reader_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '读者编号',
username VARCHAR(50) NOT NULL COMMENT '用户名',
password VARCHAR(100) NOT NULL COMMENT '登录密码',
real_name VARCHAR(50) COMMENT '姓名',
gender VARCHAR(10) COMMENT '性别',
phone VARCHAR(20) COMMENT '手机号',
register_time DATETIME COMMENT '注册时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='读者/学生信息表';
-- 3. 图书表 (book)
CREATE TABLE IF NOT EXISTS book (
book_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '图书编号',
book_name VARCHAR(100) NOT NULL COMMENT '图书名称',
book_type VARCHAR(50) COMMENT '图书分类',
author VARCHAR(50) COMMENT '作者',
publisher VARCHAR(50) COMMENT '出版社',
stock INT NOT NULL DEFAULT 0 COMMENT '图书库存',
book_desc TEXT COMMENT '图书简介'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='图书信息表';
-- 4. 借阅记录表 (borrow)
CREATE TABLE IF NOT EXISTS borrow (
borrow_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '借阅编号',
reader_id INT NOT NULL COMMENT '读者编号',
book_id INT NOT NULL COMMENT '图书编号',
borrow_time DATETIME COMMENT '借阅时间',
due_time DATETIME COMMENT '到期时间',
return_time DATETIME COMMENT '归还时间',
overdue_fine DECIMAL(10,2) COMMENT '逾期罚款金额',
-- 外键关联(可选,实训不加也可正常运行)
FOREIGN KEY (reader_id) REFERENCES reader(reader_id),
FOREIGN KEY (book_id) REFERENCES book(book_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='图书借阅记录表';
– 读者表、图书表、借阅记录表省略,文末附完整SQL
截图点 1:Navicat 新建数据库界面、四张数据表结构截图



三、IDEA 创建 SpringBoot 项目框架
打开 IDEA,新建 Spring Initializr 项目,配置 Group、Artifact,Java 版本 ,SpringBoot 2.7.15 版本。
勾选核心依赖:
Spring Web:后端接口、页面访问
MySQL Driver:数据库驱动
MyBatis/MyBatis-Plus:操作数据库
Lombok:简化实体类 get/set 代码
等待 Maven 下载全部依赖,等待 5-10 分钟,依赖全部加载完成无红色报错。
截图点 2:Spring Initializr 创建页面、pom.xml 依赖完整截图
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>library</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>library Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.12.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version> <!-- 请检查最新版本 -->
<scope>provided</scope> <!-- 对于编译时使用Lombok,但不希望在运行时包含Lombok的jar -->
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>cn.benma666</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.22</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<finalName>library</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.4.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.3.1</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.13.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.3.0</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.4.0</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>3.1.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>3.1.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>



项目分层架构搭建(标准 MVC)
按照实训规范分层创建包:
entity:实体类,对应四张数据表 Admin、Book、Reader、Borrow
mapper:MyBatis 数据库操作接口
service:业务逻辑层,Service 接口 + ServiceImpl 实现类
controller:控制层,接收前端请求、返回数据
util:工具类(日期计算、罚款计算工具)
static:存放前端 html、css、js 静态页面文件
截图点 3:完整项目目录结构截图

四、配置文件 application.yml 连接数据库
修改 resources 下 application.yml,配置 MySQL 连接、端口、MyBatis 映射:
yaml
server:
port: 8080
servlet:
context-path: /
jsp:
init-parameters:
development: true
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/library?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
username: root
password: 123456
启动项目 main 方法,观察控制台无数据库连接报错,访问localhost:8080/login可进入登录页面,基础环境搭建完成。
五、搭建阶段新手高频踩坑总结(重点)
坑 1:MySQL8.0 时区报错
报错信息:serverTimezone 为空,数据库连接失败
解决:url 后拼接serverTimezone=Asia/Shanghai,不能省略,MySQL8 强制要求时区配置。
坑 2:Maven 依赖爆红,下载失败
原因:默认国外镜像下载缓慢,依赖中断
解决:修改 maven 配置阿里云镜像,重新刷新 Maven,等待依赖完整加载。
坑 3:Lombok 注解失效,get/set 方法找不到
原因:IDEA 未安装 Lombok 插件,未开启注解处理
解决:File->Settings 安装 Lombok 插件,勾选 Enable annotation processing。
坑 4:数据库表字段和实体类属性映射失败
原因:MyBatis 未配置别名、mapper 文件路径写错
解决:yml 中配置 type-aliases-package,mapper 文件统一放在 resources/mapper 下。
坑 5:启动端口 8080 被占用
解决:yml 修改 server.port 为 8081,或者关闭占用端口的程序。
六、个人搭建心得
作为实训新手,最开始搭建框架花了整整一下午,大部分时间都在处理依赖、数据库连接的报错。之前上课只听老师讲步骤,自己实操才发现细节非常多。先确认本地 JDK、MySQL 环境正常,再一步步创建项目、分层、写配置,遇到报错不要直接复制网上代码,看懂报错日志再针对性解决,踩过的坑整理下来,后续开发模块时节省大量时间。
更多推荐


所有评论(0)