前言
基于SSM(Spring + Spring MVC + Mybatis)框架开发的一个较为简单的云借阅图书管理系统,虽然比较简单,但是耐心的做完会对 Spring框架 和 Spring MVC框架 以及 Mybatis框架 这三个框架的整合开发有一个较好的理解。下面我就来简单的研究一下代码,全部的代码文件,我会放在结尾。
目录
前言
一、需求分析
二、数据库设计
三、部分功能和全部模块展示
四、核心功能代码(主要展示业务逻辑层的核心代码)
五、文件结构
总结
一、需求分析
二、数据库设计
用户表(user)
图书信息表(book)
借阅记录表(record)
三、部分功能和全部模块展示
登录模块
新书推荐模块
图书借阅模块
当前借阅模块
借阅记录模块
添加图书功能
编辑图书功能
四、核心功能代码(主要展示业务逻辑层的核心代码)
登录功能模块
package com.demo.service.Impl;import com.demo.domain.User;
import com.demo.mapper.UserMapper;
import com.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;/*** @BelongsProject: CloudLibraryManagementSystem* @BelongsPackage: com.demo.service.Impl* @Author: 云边小屋(My.Tears)* @CreateTime: 2023-03-21 09:14* @Description: TODO* @Version: 1.0*/@Service
public class UserServiceImpl implements UserService {// 注入UserMapper对象private UserMapper userMapper;@Autowiredpublic UserServiceImpl(UserMapper userMapper) {this.userMapper = userMapper;}// 通过User的用户账户和用户密码查询用户信息@Overridepublic User login(User user) {return userMapper.login(user);}
}
图书功能模块
package com.demo.service.Impl;import com.demo.domain.Book;
import com.demo.domain.Record;
import com.demo.domain.User;
import com.demo.entity.PageResult;
import com.demo.mapper.BookMapper;
import com.demo.service.BookService;
import com.demo.service.RecordService;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import java.text.SimpleDateFormat;
import java.util.Date;/*** @BelongsProject: CloudLibraryManagementSystem* @BelongsPackage: com.demo.service.Impl* @Author: 云边小屋(My.Tears)* @CreateTime: 2023-03-21 21:52* @Description: TODO* @Version: 1.0*/
@Service
// 开启事务注解 在操作多个数据库的时候要么同时成功 要么同时失败
@Transactional
public class BookServiceImpl implements BookService {// 注入BookMapper对象private BookMapper bookMapper;// 注入RecordService对象private RecordService recordService;@Autowiredpublic BookServiceImpl(BookMapper bookMapper, RecordService recordService) {this.bookMapper = bookMapper;this.recordService = recordService;}/*** 根据当前页码和每页需要展示的数据条数 查询最新上架的图书信息 (规定每页只存在几条图书信息)** @param pageNum 当前页码* @param pageSize 每页显示的数量* @return*/@Overridepublic PageResult selectNewBooks(Integer pageNum, Integer pageSize) {// 设置分页查询的参数 开始分页PageHelper.startPage(pageNum, pageSize);// 将查询到的结果集 给PagePage<Book> page = bookMapper.selectNewBooks();// 创建PageResult对象 将总和 和 查询到的结果集封装起来return new PageResult(page.getTotal(), page.getResult());}/*** 通过id查询图书信息** @param id id* @return {@link Book}*/@Overridepublic Book findBookById(String id) {return bookMapper.findBookById(id);}/*** 借阅图书** @param book 书* @return {@link Integer}*/@Overridepublic Integer borrowBook(Book book) {SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");// 设置当天为借阅时间book.setBorrowTime(dateFormat.format(new Date()));// 设置所借阅的图书状态为借阅中book.setStatus("1");// 更新图书信息return bookMapper.editBook(book);}/*** 查询图书** @param book 书* @param pageNum 当前页面* @param pageSize 页面的长度* @return {@link PageResult}*/@Overridepublic PageResult search(Book book, Integer pageNum, Integer pageSize) {// 设置分页查询PageHelper.startPage(pageNum, pageSize);// 封装结果集Page<Book> books = bookMapper.searchBooks(book);// 返回结果集给分页插件return new PageResult(books.getTotal(), books.getResult());}/*** 添加图书** @param book 书* @return {@link Integer}*/@Overridepublic Integer addBook(Book book) {// 设置上架时间SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");String uploadTime = format.format(new Date());book.setUploadTime(uploadTime);return bookMapper.addBook(book);}/*** 编辑图书** @param book 书* @return {@link Integer}*/@Overridepublic Integer editBook(Book book) {return bookMapper.editBook(book);}/*** 查询图书** @param book 封装图书* @param user 判断用户是否为管理员* @param pageNum 页面的码页* @param pageSize 页面的长度* @return {@link PageResult}*/@Overridepublic PageResult searchBorrowed(Book book, User user, Integer pageNum, Integer pageSize) {// 设置分页查询的参数PageHelper.startPage(pageNum, pageSize);// 将当前登录的用户获取book.setBorrower(user.getName());Page<Book> page = null;// 判断是否为管理员if ("ADMIN".equals(user.getRole())) {// 管理员 --> 可以查询当前的借阅图书以及所有的归还中的图书page = bookMapper.selectBorrowed(book);} else {// 普通人 --> 可以查询当前的借阅图书以及当前的归还中的图书和未归还的图书page = bookMapper.selectMyBorrowed(book);}// 返回封装的结果集 后面交给前端处理return new PageResult(page.getTotal(), page.getResult());}/*** 归还图书** @param id 归还图书的id* @param user 归还的人员* @return {@link Boolean}*/@Overridepublic Boolean returnBook(String id, User user) {// 根据图书id查询图书的完整信息Book bookById = this.findBookById(id);// 检查当前登录人员和图书借阅者是否为同一个人boolean flag = bookById.getBorrower().equals(user.getName());// 判断是否为空同一个人if (flag) {// 等于true 就说明是同一个人 修改图书的状态 改成归还中 等待管理员确认bookById.setStatus("2");bookMapper.editBook(bookById);}return flag;}/*** 确认归还** @param id 待归还的图书id* @return {@link Integer}*/@Overridepublic Integer returnConfirm(String id) {// 根据图书的id查询图书的完整信息Book bookById = this.findBookById(id);// 获取归还图书的借阅信息String borrower = bookById.getBorrower();String borrowTime = bookById.getBorrowTime();// 将图书的借阅状态修改成可借阅bookById.setStatus("0");// 清除当前图书的借阅人信息bookById.setBorrower("");// 清除当前图书的借阅时间信息bookById.setBorrowTime("");// 清除当前图书的预计归还时间信息bookById.setReturnTime("");Integer book = bookMapper.editBook(bookById);if (book > 0) {// 当管理员确认无误归还图书 就将图书记录添加到Record中Record record = new Record();// 设置借阅时间record.setId(bookById.getId());record.setBookIsbn(bookById.getIsbn());record.setBookName(bookById.getName());record.setBorrowTime(borrowTime);record.setBookBorrower(borrower);SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");String returnTime = format.format(new Date());record.setRemandTime(returnTime);recordService.addRecord(record);}return book;}}
借阅记录功能模块
package com.demo.service.Impl;import com.demo.domain.Record;
import com.demo.domain.User;
import com.demo.entity.PageResult;
import com.demo.mapper.RecordMapper;
import com.demo.service.RecordService;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;/*** @BelongsProject: CloudLibraryManagementSystem* @BelongsPackage: com.demo.service.Impl* @Author: 云边小屋(My.Tears)* @CreateTime: 2023-03-24 15:19* @Description: TODO* @Version: 1.0*/@Service
public class RecordServiceImpl implements RecordService {// 注入RecordMapper对象private RecordMapper recordMapper;@Autowiredpublic RecordServiceImpl(RecordMapper recordMapper) {this.recordMapper = recordMapper;}/*** 添加借阅记录** @param record 记录* @return {@link Integer}*/@Overridepublic Integer addRecord(Record record) {return recordMapper.addRecord(record);}/*** 查询借阅记录** @param record 当前记录的查询条件* @param user 当前的登录用户* @param pageNum 页面码* @param pageSize 页面长度* @return {@link PageResult}*/@Overridepublic PageResult searchRecords(Record record, User user, Integer pageNum, Integer pageSize) {// 设置分页查询PageHelper.startPage(pageNum,pageSize);// 判断是否为管理员if (!"ADMIN".equals(user.getRole())){/*** 如果不是管理员 就将查询条件中的 借阅人设置为当前登录用户* 如果是管理员 那么就不会运行该if 反之 若为普通用户则运行该if* 将条件中的借阅人设置为当前登录人*/record.setBookBorrower(user.getName());}Page<Record> page = recordMapper.searchRecords(record);return new PageResult(page.getTotal(),page.getResult());}
}
五、文件结构
总结
云借阅图书管理系统的全部核心代码文件:
链接:百度网盘 请输入提取码
提取码: 1234