基于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; @Autowired public UserServiceImpl(UserMapper userMapper) { this.userMapper = userMapper; } // 通过User的用户账户和用户密码查询用户信息 @Override public 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; @Autowired public BookServiceImpl(BookMapper bookMapper, RecordService recordService) { this.bookMapper = bookMapper; this.recordService = recordService; } /** * 根据当前页码和每页需要展示的数据条数 查询最新上架的图书信息 (规定每页只存在几条图书信息) * * @param pageNum 当前页码 * @param pageSize 每页显示的数量 * @return */ @Override public PageResult selectNewBooks(Integer pageNum, Integer pageSize) { // 设置分页查询的参数 开始分页 PageHelper.startPage(pageNum, pageSize); // 将查询到的结果集 给Page Pagepage = bookMapper.selectNewBooks(); // 创建PageResult对象 将总和 和 查询到的结果集封装起来 return new PageResult(page.getTotal(), page.getResult()); } /** * 通过id查询图书信息 * * @param id id * @return {@link Book} */ @Override public Book findBookById(String id) { return bookMapper.findBookById(id); } /** * 借阅图书 * * @param book 书 * @return {@link Integer} */ @Override public 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} */ @Override public PageResult search(Book book, Integer pageNum, Integer pageSize) { // 设置分页查询 PageHelper.startPage(pageNum, pageSize); // 封装结果集 Page books = bookMapper.searchBooks(book); // 返回结果集给分页插件 return new PageResult(books.getTotal(), books.getResult()); } /** * 添加图书 * * @param book 书 * @return {@link Integer} */ @Override public 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} */ @Override public Integer editBook(Book book) { return bookMapper.editBook(book); } /** * 查询图书 * * @param book 封装图书 * @param user 判断用户是否为管理员 * @param pageNum 页面的码页 * @param pageSize 页面的长度 * @return {@link PageResult} */ @Override public PageResult searchBorrowed(Book book, User user, Integer pageNum, Integer pageSize) { // 设置分页查询的参数 PageHelper.startPage(pageNum, pageSize); // 将当前登录的用户获取 book.setBorrower(user.getName()); Page 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} */ @Override public 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} */ @Override public 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; @Autowired public RecordServiceImpl(RecordMapper recordMapper) { this.recordMapper = recordMapper; } /** * 添加借阅记录 * * @param record 记录 * @return {@link Integer} */ @Override public Integer addRecord(Record record) { return recordMapper.addRecord(record); } /** * 查询借阅记录 * * @param record 当前记录的查询条件 * @param user 当前的登录用户 * @param pageNum 页面码 * @param pageSize 页面长度 * @return {@link PageResult} */ @Override public 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()); } Pagepage = recordMapper.searchRecords(record); return new PageResult(page.getTotal(),page.getResult()); } }
云借阅图书管理系统的全部核心代码文件:
链接:百度网盘 请输入提取码
提取码: 1234