Article
项目背景
这是我在大学期间完成的第一个完整的 Java Web 项目——在线图书管理系统。虽然功能不复杂,但是让我对整个开发流程有了更深的理解。
技术栈
- 后端框架: SSM(Spring + Spring MVC + MyBatis)
- 数据库: MySQL 8.0
- 前端: Bootstrap + jQuery
- 构建工具: Maven
- 服务器: Tomcat 9
功能模块
1. 用户管理
- 用户注册、登录
- 个人信息管理
- 借阅历史查询
2. 图书管理
- 图书的增删改查
- 图书分类管理
- 图书库存管理
3. 借阅管理
- 图书借阅
- 图书归还
- 逾期提醒
开发过程
第一阶段:需求分析和设计
花了大约一周时间进行需求分析和数据库设计。
数据库设计:
-- 用户表
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL,
email VARCHAR(100),
phone VARCHAR(20),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 图书表
CREATE TABLE books (
id INT PRIMARY KEY AUTO_INCREMENT,
isbn VARCHAR(20) UNIQUE,
title VARCHAR(200) NOT NULL,
author VARCHAR(100),
publisher VARCHAR(100),
stock INT DEFAULT 0,
status TINYINT DEFAULT 1
);
-- 借阅记录表
CREATE TABLE borrow_records (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT,
book_id INT,
borrow_date DATE,
return_date DATE,
actual_return_date DATE,
status ENUM('borrowed', 'returned', 'overdue'),
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (book_id) REFERENCES books(id)
);
第二阶段:搭建项目框架
使用 Maven 创建项目,配置 SSM 框架。
pom.xml 主要依赖:
<dependencies>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.20</version>
</dependency>
<!-- MyBatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
</dependency>
<!-- MySQL -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
</dependencies>
第三阶段:编写业务代码
采用分层架构:Controller -> Service -> DAO
Controller 示例:
@Controller
@RequestMapping("/book")
public class BookController {
@Autowired
private BookService bookService;
@GetMapping("/list")
public String listBooks(Model model) {
List<Book> books = bookService.getAllBooks();
model.addAttribute("books", books);
return "book/list";
}
@PostMapping("/add")
@ResponseBody
public Result addBook(@RequestBody Book book) {
try {
bookService.addBook(book);
return Result.success("添加成功");
} catch (Exception e) {
return Result.error("添加失败:" + e.getMessage());
}
}
}
第四阶段:前端开发
使用 Bootstrap 快速搭建页面,jQuery 处理交互。
// 添加图书
$('#addBookBtn').click(function() {
var bookData = {
isbn: $('#isbn').val(),
title: $('#title').val(),
author: $('#author').val(),
stock: $('#stock').val()
};
$.ajax({
url: '/book/add',
type: 'POST',
contentType: 'application/json',
data: JSON.stringify(bookData),
success: function(result) {
if(result.code === 200) {
alert('添加成功');
location.reload();
} else {
alert('添加失败:' + result.message);
}
}
});
});
遇到的问题和解决方案
问题1:中文乱码
问题描述:提交表单时中文显示乱码
解决方案:
<!-- web.xml 配置字符编码过滤器 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
问题2:AJAX 请求 404
问题描述:前端 AJAX 请求后端接口返回 404
解决方案:检查请求路径和 @RequestMapping 注解,确保路径一致。
问题3:事务不生效
问题描述:数据库操作异常时没有回滚
解决方案:
@Service
@Transactional // 添加事务注解
public class BookServiceImpl implements BookService {
@Override
public void borrowBook(int userId, int bookId) {
// 减少库存
bookDao.decreaseStock(bookId);
// 创建借阅记录
BorrowRecord record = new BorrowRecord();
record.setUserId(userId);
record.setBookId(bookId);
borrowDao.insert(record);
}
}
项目亮点
- 参数校验:使用 Hibernate Validator 进行参数校验
- 异常处理:统一的异常处理机制
- 日志记录:使用 Log4j 记录操作日志
- 分页查询:使用 PageHelper 实现分页
经验教训
做得好的地方
✅ 代码结构清晰,分层明确
✅ 注释比较完整,便于理解
✅ 数据库设计合理,使用了外键约束
✅ 完成了基本的单元测试
需要改进的地方
❌ 前端代码比较混乱,没有模块化
❌ 安全性不够,密码直接存储(应该加密)
❌ 没有做前端验证,完全依赖后端
❌ 性能优化不够,没有使用缓存
后续优化计划
- 使用 Spring Security 增强安全性
- 引入 Redis 做缓存
- 前端改用 Vue.js 重构
- 添加更多功能(如图书推荐、评论等)
- 部署到云服务器
收获与感悟
这个项目虽然简单,但让我对 Java Web 开发有了全面的认识:
- 理论与实践结合:课本上的知识在实践中才能真正理解
- 遇到问题不要慌:善用搜索引擎和官方文档
- 代码规范很重要:良好的代码习惯受益终身
- 测试不能少:完整的测试能避免很多问题
总结
第一个项目总会有很多不足,但这是成长的开始。通过这个项目,我不仅巩固了课堂知识,还学会了如何独立解决问题。接下来会继续学习 Spring Boot,开发更复杂的项目!
项目 GitHub 地址:(待上传)
欢迎大家交流学习!