目录

  • 1,项目介绍
  • 2,技术选型
  • 3,数据库构建
    • 1,创建库
    • 2,创建表
  • 4,项目构建
  • 5,功能介绍
    • 1,用户首页
    • 2,登录界面
    • 3,菜单列表
    • 4,菜单管理
    • 5,角色管理
    • 6,用户管理
    • 7,图书条目
    • 8,图书库存
    • 9,图书借阅
    • 10,字典管理
    • 11,作者管理
  • 6,项目部署
    • 1,以 jar 包方式部署
    • 2,以 war 包方式部署

1,项目介绍

book-manager 是一套图书管理系统,前端界面使用了 EasyUI 框架,后端基于SpringBoot+MyBatis 实现。

本系统包含首页门户、系统管理、权限管理、图书管理等模块。

源码地址:https://gitee.com/codeshellme/book-manager

2,技术选型

主要技术

技术 说明 官网
Java 后端语言 https://www.java.com/zh-CN/
MySQL 数据库 https://www.mysql.com/

前端技术框架

技术 说明 官网
JQuery JavaScript 库 https://jquery.com/
EasyUI Web UI 框架 https://www.jeasyui.net/

后端技术框架

技术 说明 官网
SpringBoot 容器+MVC框架 https://spring.io/projects/spring-boot
SpringSecurity 认证和授权框架 https://spring.io/projects/spring-security
JWT JWT 登录支持 https://github.com/jwtk/jjwt
MyBatis ORM 框架 http://www.mybatis.org/mybatis-3/zh/index.html
Lombok Java 对象封装工具 https://github.com/rzwitserloot/lombok
PageHelper MyBatis 分页插件 https://pagehelper.github.io
Hutool Java 工具类库 https://www.hutool.cn
Maven 项目构建工具 https://maven.apache.org

开发工具

工具 说明 官网
IDEA Java 集成开发环境 https://www.jetbrains.com/idea/download/
X-shell Linux 远程连接工具 https://www.netsarang.com/zh/all-downloads/
Navicat 数据库连接工具 https://www.navicat.com.cn
Git 版本控制工具 https://git-scm.com
Typora Markdown 编辑器 https://typora.io/

Idea 插件

这里介绍两个 Idea 插件(File -> Settings -> Plugins):

  • Lombok
  • Free MyBatis plugin

因为项目中使用了 Lombok,所以 Lombok 插件是必须的;Free MyBatis plugin 可以实现 Dao 层接口到 Mapper 文件的跳转。

3,数据库构建

数据库使用的是 MySQL。

1,创建库

新建 book 数据库:

CREATE DATABASE `book` CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';

2,创建表

1,创建用户表 ums_user

-- Table structure for ums_user
DROP TABLE IF EXISTS `ums_user`;
CREATE TABLE `ums_user`  (`id` int(0) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增 ID',`username` varchar(12) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户名',`password` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '密码',`nickname` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '昵称',`pincode` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '拼音简码',`status` tinyint(0) UNSIGNED NOT NULL DEFAULT 1 COMMENT '帐号启用状态:0->禁用;1->启用',`create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',`update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',`role_id` int(0) UNSIGNED NOT NULL COMMENT '角色 ID',PRIMARY KEY (`id`) USING BTREE,UNIQUE INDEX `idx_username`(`username`) USING BTREE COMMENT '唯一索引'
) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- Records of ums_user
INSERT INTO `ums_user` VALUES (1, 'admin', '3', '超级管理员', 'cjgly', 1, now(), now(), 1);
INSERT INTO `ums_user` VALUES (2, 'book', '5', '图书管理员', 'tsgly', 1, now(), now(), 2);
INSERT INTO `ums_user` VALUES (3, '11', '11', '11', '11', 1, now(), now(), 3);
INSERT INTO `ums_user` VALUES (4, '12', '12', '12', '12', 1, now(), now(), 3);

2,创建角色表 ums_role

-- Table structure for ums_role
DROP TABLE IF EXISTS `ums_role`;
CREATE TABLE `ums_role`  (`id` int(0) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增 id',`name` varchar(25) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '角色名称',`sign` varchar(25) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '角色标识',`remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '角色说明',`status` tinyint(0) UNSIGNED NOT NULL DEFAULT 1 COMMENT '帐号启用状态:0->禁用;1->启用',`create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',`update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',PRIMARY KEY (`id`) USING BTREE,UNIQUE INDEX `idx_sign`(`sign`) USING BTREE COMMENT '唯一索引,sign 作为唯一标识,不能重复'
) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- Records of ums_role
INSERT INTO `ums_role` VALUES (1, '超级用户', 'super', '拥有最高权限', 1, now(), now());
INSERT INTO `ums_role` VALUES (2, '图书管理员', 'manager', '图书管理员', 1, now(), now());
INSERT INTO `ums_role` VALUES (3, '普通用户', 'user', '普通用户', 1, now(), now());

3,创建菜单表 ums_menu

-- Table structure for ums_menu
DROP TABLE IF EXISTS `ums_menu`;
CREATE TABLE `ums_menu`  (`id` int(0) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增 ID',`parent_id` int(0) UNSIGNED NOT NULL COMMENT '上级菜单id',`name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '菜单名称',`icon` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '菜单图标',`url` varchar(80) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '菜单url',`type` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '菜单类型:DIR/SUBMENU',`order` tinyint(0) UNSIGNED NOT NULL COMMENT '菜单排序',`status` tinyint(0) UNSIGNED NOT NULL DEFAULT 1 COMMENT '启用状态:0->禁用;1->启用',`create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',`update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 17 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- Records of ums_menu
INSERT INTO `ums_menu` VALUES (1, 0, '权限管理', 'icon-computer-edit', '/', 'DIR', 1, 1, now(), now());
INSERT INTO `ums_menu` VALUES (2, 1, '菜单管理', 'icon-node-tree16', '/menu', 'SUBMENU', 1, 1, now(), now());
INSERT INTO `ums_menu` VALUES (3, 1, '角色管理', 'icon-user-group', '/role', 'SUBMENU', 2, 1, now(), now());
INSERT INTO `ums_menu` VALUES (4, 0, '图书管理', 'icon-book-open', '/', 'DIR', 2, 1, now(), now());
INSERT INTO `ums_menu` VALUES (5, 4, '图书借阅', 'icon-book-tabs', '/book_borrow', 'SUBMENU', 3, 1, now(), now());
INSERT INTO `ums_menu` VALUES (11, 1, '用户管理', 'icon-users', '/user', 'SUBMENU', 3, 1, now(), now());
INSERT INTO `ums_menu` VALUES (12, 0, '系统管理', 'icon-wrench', '/', 'DIR', 4, 1, now(), now());
INSERT INTO `ums_menu` VALUES (13, 12, '字典管理', 'icon-application-view-columns', '/sys_dict', 'SUBMENU', 1, 1, now(), now());
INSERT INTO `ums_menu` VALUES (14, 12, '作者管理', 'icon-user-suit', '/sys_author', 'SUBMENU', 2, 1, now(), now());
INSERT INTO `ums_menu` VALUES (15, 4, '图书条目', 'icon-application-side-list', '/sys_book', 'SUBMENU', 1, 1, now(), now());
INSERT INTO `ums_menu` VALUES (16, 4, '图书库存', 'icon-book-key', '/book_stock', 'SUBMENU', 2, 1, now(), now());

4,创建角色菜单关系表 ums_role_menu

-- Table structure for ums_role_menu
DROP TABLE IF EXISTS `ums_role_menu`;
CREATE TABLE `ums_role_menu`  (`id` int(0) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增 id',`role_id` int(0) UNSIGNED NOT NULL COMMENT '角色 id',`menu_id` int(0) UNSIGNED NOT NULL COMMENT '角色 id 对应的菜单 id',PRIMARY KEY (`id`) USING BTREE,UNIQUE INDEX `idx_role_menu`(`role_id`, `menu_id`) USING BTREE COMMENT '联合唯一索引'
) ENGINE = InnoDB AUTO_INCREMENT = 80 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- Records of ums_role_menu
INSERT INTO `ums_role_menu` VALUES (11, 1, 1);
INSERT INTO `ums_role_menu` VALUES (55, 1, 2);
INSERT INTO `ums_role_menu` VALUES (14, 1, 3);
INSERT INTO `ums_role_menu` VALUES (71, 1, 4);
INSERT INTO `ums_role_menu` VALUES (69, 1, 5);
INSERT INTO `ums_role_menu` VALUES (70, 1, 6);
INSERT INTO `ums_role_menu` VALUES (3, 1, 7);
INSERT INTO `ums_role_menu` VALUES (5, 1, 9);
INSERT INTO `ums_role_menu` VALUES (67, 1, 11);
INSERT INTO `ums_role_menu` VALUES (73, 1, 12);
INSERT INTO `ums_role_menu` VALUES (72, 1, 13);
INSERT INTO `ums_role_menu` VALUES (74, 1, 14);
INSERT INTO `ums_role_menu` VALUES (76, 1, 15);
INSERT INTO `ums_role_menu` VALUES (78, 1, 16);
INSERT INTO `ums_role_menu` VALUES (60, 2, 1);
INSERT INTO `ums_role_menu` VALUES (59, 2, 3);
INSERT INTO `ums_role_menu` VALUES (44, 2, 4);
INSERT INTO `ums_role_menu` VALUES (43, 2, 6);
INSERT INTO `ums_role_menu` VALUES (42, 2, 7);
INSERT INTO `ums_role_menu` VALUES (41, 2, 9);
INSERT INTO `ums_role_menu` VALUES (66, 3, 4);
INSERT INTO `ums_role_menu` VALUES (65, 3, 5);

5,创建字典表 sys_dict

-- Table structure for sys_dict
DROP TABLE IF EXISTS `sys_dict`;
CREATE TABLE `sys_dict`  (`id` int(0) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增 id',`father_id` int(0) UNSIGNED NOT NULL COMMENT '父 id',`name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '名称',`keyname` varchar(25) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '关键字',`dicttype` varchar(25) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '字典类型',`sn` int(0) UNSIGNED NOT NULL COMMENT '排序',`status` tinyint(0) UNSIGNED NOT NULL DEFAULT 1 COMMENT '启用状态:0->禁用;1->启用',`create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',`update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',`pincode` varchar(25) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '名称简码',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 22 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- Records of sys_dict
INSERT INTO `sys_dict` VALUES (1, 0, '国籍', 'Nationality', 'Nationality', 0, 1, now(), now(), 'gj');
INSERT INTO `sys_dict` VALUES (2, 1, '中国', 'China', 'Nationality', 1, 1, now(), now(), 'zg');
INSERT INTO `sys_dict` VALUES (3, 1, '美国', 'America', 'Nationality', 2, 1, now(), now(), 'mg');
INSERT INTO `sys_dict` VALUES (4, 1, '俄罗斯', 'Russia', 'Nationality', 3, 1, now(), now(), 'els');
INSERT INTO `sys_dict` VALUES (5, 1, '法国', 'France', 'Nationality', 4, 1, now(), now(), 'fg');
INSERT INTO `sys_dict` VALUES (6, 1, '德国', 'Germany', 'Nationality', 5, 1, now(), now(), 'dg');
INSERT INTO `sys_dict` VALUES (7, 1, '日本', 'Japan', 'Nationality', 6, 1, now(), now(), 'rb');
INSERT INTO `sys_dict` VALUES (8, 1, '新加坡', 'Singapore', 'Nationality', 7, 1, now(), now(), 'xjp');
INSERT INTO `sys_dict` VALUES (9, 0, '性别', 'Sex', 'Sex', 0, 1, now(), now(), 'xb');
INSERT INTO `sys_dict` VALUES (10, 9, '男', 'Man', 'Sex', 1, 1, now(), now(), 'n');
INSERT INTO `sys_dict` VALUES (11, 9, '女', 'Women', 'Sex', 2, 1, now(), now(), 'n');
INSERT INTO `sys_dict` VALUES (12, 0, '图书类型', 'Booktype', 'Booktype', 0, 1, now(), now(), 'tslx');
INSERT INTO `sys_dict` VALUES (13, 12, '小说', 'Novel', 'Booktype', 1, 1, now(), now(), 'xs');
INSERT INTO `sys_dict` VALUES (14, 12, '文学', 'Literature', 'Booktype', 2, 1, now(), now(), 'wx');
INSERT INTO `sys_dict` VALUES (15, 12, '传记', 'Biography', 'Booktype', 3, 1, now(), now(), 'zj');
INSERT INTO `sys_dict` VALUES (16, 12, '艺术', 'Art', 'Booktype', 4, 1, now(), now(), 'ys');
INSERT INTO `sys_dict` VALUES (17, 12, '摄影', 'Photography', 'Booktype', 5, 1, now(), now(), 'sy');
INSERT INTO `sys_dict` VALUES (18, 12, '哲学', 'Philosophy', 'Booktype', 6, 1, now(), now(), 'zx');
INSERT INTO `sys_dict` VALUES (19, 12, '历史', 'History', 'Booktype', 7, 1, now(), now(), 'ls');
INSERT INTO `sys_dict` VALUES (20, 12, '军事', 'Military', 'Booktype', 8, 1, now(), now(), 'js');
INSERT INTO `sys_dict` VALUES (21, 12, '计算机', 'Computer', 'Booktype', 9, 1, now(), now(), 'jsj');

6,创建图书作者表 book_author

-- Table structure for book_author
DROP TABLE IF EXISTS `book_author`;
CREATE TABLE `book_author`  (`id` int(0) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增 id',`name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '姓名',`pincode` varchar(25) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '姓名简码',`sex` tinyint(0) UNSIGNED NOT NULL COMMENT '性别:0->女,1->男',`nationality_id` int(0) UNSIGNED NOT NULL COMMENT '国籍 id,见 sys_dict 表',`status` tinyint(0) UNSIGNED NOT NULL DEFAULT 1 COMMENT '启用状态:0->禁用;1->启用',`create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',`update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',PRIMARY KEY (`id`) USING BTREE,UNIQUE INDEX `idx_name`(`name`) USING BTREE COMMENT '唯一索引'
) ENGINE = InnoDB AUTO_INCREMENT = 21 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- Records of book_author
INSERT INTO `book_author` VALUES (1, '鲁迅', 'lx', 1, 2, 1, now(), now());
INSERT INTO `book_author` VALUES (2, '沈从文', 'scw', 1, 2, 1, now(), now());
INSERT INTO `book_author` VALUES (3, '张爱玲', 'zal', 0, 2, 1, now(), now());
INSERT INTO `book_author` VALUES (4, '巴金', 'bj', 1, 2, 1, now(), now());
INSERT INTO `book_author` VALUES (5, '钱钟书', 'qzs', 1, 2, 1, now(), now());
INSERT INTO `book_author` VALUES (6, '茅盾', 'md', 1, 2, 1, now(), now());
INSERT INTO `book_author` VALUES (7, '莫言', 'my', 1, 2, 1, now(), now());
INSERT INTO `book_author` VALUES (8, '史铁生', 'sts', 1, 2, 1, now(), now());
INSERT INTO `book_author` VALUES (9, '余秋雨', 'yqy', 1, 2, 1, now(), now());
INSERT INTO `book_author` VALUES (10, '韩寒', 'hh', 1, 2, 1, now(), now());
INSERT INTO `book_author` VALUES (11, '郭敬明', 'gjm', 1, 2, 1, now(), now());
INSERT INTO `book_author` VALUES (12, '易中天', 'yzt', 1, 2, 1, now(), now());
INSERT INTO `book_author` VALUES (14, '余华', 'yh', 1, 2, 1, now(), now());
INSERT INTO `book_author` VALUES (15, '刘震云', 'lzy', 1, 2, 1, now(), now());

7,创建图书条目表 book_item

-- Table structure for book_item
DROP TABLE IF EXISTS `book_item`;
CREATE TABLE `book_item`  (`id` int(0) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增 id',`name` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '书名',`pincode` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '书名简码',`type_id` int(0) UNSIGNED NOT NULL COMMENT '书的类型',`author_id` int(0) UNSIGNED NOT NULL COMMENT '作者 id',`publisher` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '出版社',`status` tinyint(0) UNSIGNED NOT NULL DEFAULT 1 COMMENT '0->禁用;1->启用',`remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',`create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',`update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',PRIMARY KEY (`id`) USING BTREE,UNIQUE INDEX `idx`(`name`) USING BTREE COMMENT '唯一索引'
) ENGINE = InnoDB AUTO_INCREMENT = 27 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- Records of book_item
INSERT INTO `book_item` VALUES (1, '呐喊', 'nh', 14, 1, 'aaa', 1, 'aaaaa', now(), now());
INSERT INTO `book_item` VALUES (2, '彷徨', 'ph', 14, 1, NULL, 1, NULL, now(), now());
INSERT INTO `book_item` VALUES (3, '围城', 'wc', 13, 5, NULL, 1, NULL, now(), now());
INSERT INTO `book_item` VALUES (4, '人·兽·鬼', 'rsg', 13, 5, NULL, 1, NULL, now(), now());
INSERT INTO `book_item` VALUES (5, '丰乳肥臀', 'frft', 13, 7, NULL, 1, NULL, now(), now());
INSERT INTO `book_item` VALUES (6, '生死疲劳', 'sspl', 13, 7, NULL, 1, NULL, now(), now());
INSERT INTO `book_item` VALUES (7, '红高粱家族', 'hgljz', 13, 7, NULL, 1, NULL, now(), now());
INSERT INTO `book_item` VALUES (8, '我与地坛', 'wydt', 14, 8, NULL, 1, NULL, now(), now());
INSERT INTO `book_item` VALUES (9, '务虚笔记', 'wxbj', 14, 8, NULL, 1, NULL, now(), now());
INSERT INTO `book_item` VALUES (10, '病隙碎笔', 'bxsb', 14, 8, NULL, 1, NULL, now(), now());
INSERT INTO `book_item` VALUES (11, '文化苦旅', 'whkl', 14, 9, NULL, 1, NULL, now(), now());
INSERT INTO `book_item` VALUES (12, '山居笔记', 'sjbj', 14, 9, NULL, 1, NULL, now(), now());
INSERT INTO `book_item` VALUES (13, '千年一叹', 'qnyt', 14, 9, NULL, 1, NULL, now(), now());
INSERT INTO `book_item` VALUES (14, '行者无疆', 'xzwj', 14, 9, NULL, 1, NULL, now(), now());
INSERT INTO `book_item` VALUES (15, '霜冷长河', 'slch', 14, 9, NULL, 1, NULL, now(), now());
INSERT INTO `book_item` VALUES (16, '借我一生', 'jwys', 14, 9, NULL, 1, NULL, now(), now());
INSERT INTO `book_item` VALUES (17, '三重门', 'scm', 13, 10, NULL, 1, NULL, now(), now());
INSERT INTO `book_item` VALUES (18, '零下一度', 'lxyd', 13, 10, NULL, 1, NULL, now(), now());
INSERT INTO `book_item` VALUES (19, '像少年啦飞驰', 'xsnlfc', 13, 10, NULL, 1, NULL, now(), now());
INSERT INTO `book_item` VALUES (20, '一座城池', 'yzcc', 13, 10, NULL, 1, NULL, now(), now());
INSERT INTO `book_item` VALUES (21, '杂的文', 'zdw', 14, 10, NULL, 1, NULL, now(), now());
INSERT INTO `book_item` VALUES (22, '我所理解的生活', 'wsljdsh', 14, 10, NULL, 1, NULL, now(), now());
INSERT INTO `book_item` VALUES (23, '活着', 'hz', 13, 14, NULL, 1, NULL, now(), now());
INSERT INTO `book_item` VALUES (24, '许三观卖血记', 'xsgmxj', 13, 14, NULL, 1, NULL, now(), now());
INSERT INTO `book_item` VALUES (25, '兄弟', 'xd', 13, 14, NULL, 1, NULL, now(), now());

8,创建图书库存表 book_stock

-- Table structure for book_stock
DROP TABLE IF EXISTS `book_stock`;
CREATE TABLE `book_stock`  (`id` int(0) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增 id',`book_id` int(0) UNSIGNED NOT NULL COMMENT 'book_item.id',`num` int(0) UNSIGNED NOT NULL DEFAULT 0 COMMENT '库存数',`status` tinyint(0) UNSIGNED NOT NULL DEFAULT 1 COMMENT '0->禁用;1->启用',`create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',`update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',PRIMARY KEY (`id`) USING BTREE,UNIQUE INDEX `idx_bookid`(`book_id`) USING BTREE COMMENT '唯一索引'
) ENGINE = InnoDB AUTO_INCREMENT = 15 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- Records of book_stock
INSERT INTO `book_stock` VALUES (2, 5, 0, 1, now(), now());
INSERT INTO `book_stock` VALUES (3, 8, 5, 1, now(), now());
INSERT INTO `book_stock` VALUES (4, 9, 0, 1, now(), now());
INSERT INTO `book_stock` VALUES (5, 10, 10, 1, now(), now());
INSERT INTO `book_stock` VALUES (6, 2, 0, 1, now(), now());
INSERT INTO `book_stock` VALUES (7, 3, 0, 1, now(), now());
INSERT INTO `book_stock` VALUES (8, 4, 8, 1, now(), now());
INSERT INTO `book_stock` VALUES (9, 6, 0, 1, now(), now());
INSERT INTO `book_stock` VALUES (10, 7, 0, 1, now(), now());
INSERT INTO `book_stock` VALUES (12, 11, 0, 1, now(), now());
INSERT INTO `book_stock` VALUES (13, 17, 3, 1, now(), now());

9,创建图书借阅表 book_borrow

-- Table structure for book_borrow
DROP TABLE IF EXISTS `book_borrow`;
CREATE TABLE `book_borrow`  (`id` int(0) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增 id',`stock_id` int(0) UNSIGNED NOT NULL COMMENT 'book_stock.id',`student_id` int(0) UNSIGNED NOT NULL COMMENT '学生 id',`student_name` varchar(25) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '学生姓名',`status` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'Y' COMMENT '借书状态 Y-> 借书 N->已还书',`borrow_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '借书时间',`return_time` datetime(0) NULL DEFAULT NULL COMMENT '还书时间',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- Records of book_borrow
INSERT INTO `book_borrow` VALUES (1, 5, 1, '学生01', 'Y', now(), NULL);
INSERT INTO `book_borrow` VALUES (4, 8, 1, '学生01', 'N', now(), now());
INSERT INTO `book_borrow` VALUES (5, 8, 2, '学生02', 'N', now(), now());
INSERT INTO `book_borrow` VALUES (6, 9, 2, '学生02', 'Y', now(), NULL);
INSERT INTO `book_borrow` VALUES (7, 10, 3, '学生03', 'Y', now(), NULL);

4,项目构建

从 GitHub 上拉去代码到 Idea 中,在配置文件 application.properties 中配置数据库信息。

启动类是 com.codeshellme.bookmanager.BookManagerApplication,运行它就可以启动项目。

5,功能介绍

1,用户首页

2,登录界面

3,菜单列表

目前的菜单列表如下:

分别有:

  • 权限管理:包括菜单管理,角色管理和用户管理

    • 菜单管理:管理整个系统的菜单,每项菜单对应不同的功能
    • 角色管理:管理整个系统的角色,每个角色可配置不同的菜单功能,比如:
      • super 角色拥有系统的最高权限,拥有系统中的所有功能
      • manager 角色主要分配给图书管理员,可以拥有图书管理和系统管理功能,但不能拥有权限管理功能
    • 用户管理:管理整个系统的用户,每个用户只能属于一种角色,拥有所属角色的所有功能
  • 图书管理:主要用于管理图书
    • 图书条目:最基础的图书信息
    • 图书库存:代表图书馆中的所有图书库存,所有能进入库存的图书,都必须先进入图书条目
    • 图书借阅:图书借阅相关功能,只有在库存中的图书才能被借阅
    • 以上三者的范围关系为:图书条目 >= 图书库存 >= 图书借阅
  • 系统管理
    • 字典管理:管理一些基础信息,比如图书都有哪些类型,作者的国籍都有哪些等
    • 作者管理:每本书都有作者,该功能管理了系统中所有的作者信息

4,菜单管理

5,角色管理

6,用户管理

7,图书条目

8,图书库存

9,图书借阅

10,字典管理

11,作者管理

6,项目部署

下面介绍两种部署服务的方式:

  • jar 包方式部署

    • 此方式使用 springboot 内置的 tomcat 运行
  • war 包方式部署
    • 此方式使用外部 Tomcat

1,以 jar 包方式部署

用 Idea 打 jar 包非常方便,无需修改任何 pom.xml 配置,先双击 clean,然后双击 package,就可打成 jar 包。

打包成功后,会在 target 目录下生成一个 book-manager-0.0.1-SNAPSHOT.jar 文件,直接用 java 命令运行它即可启动项目:

> java -jar book-manager-0.0.1-SNAPSHOT.jar

2,以 war 包方式部署

首先需在 pom.xml 中加入打包方式:

<packaging>war</packaging>

然后,启动类 BookManagerApplication 继承 SpringBootServletInitializer,并覆盖 configure 方法:

@SpringBootApplication
public class BookManagerApplication extends SpringBootServletInitializer {public static void main(String[] args) {SpringApplication.run(BookManagerApplication.class, args);}// 继承 SpringBootServletInitializer 实现 configure// 以便打 war 包,进行外部服务器部署@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder application) {return application.sources(BookManagerApplication.class);}
}

然后,再次使用 maven 打包:

打包成功后,会在 target 目录下生成一个 book-manager-0.0.1-SNAPSHOT.war 文件,将其重命名为 book-manager.war,放入 tomcatwebapps 目录中。

然后需要配置 Tomcat 的配置文件 server.xml,其中可设置服务器端口号等信息,我们需在 Server>Service>Engine>Host 标签内加入下面配置:

<Context docBase="Tomcat根目录/webapps/book-manager" path="/" reloadable="true"/>

最后启动 Tomcat 即可。

另外,关于 springboot 相关的配置在 Tomcat根目录\webapps\book-manager\WEB-INF\classes\application.properties 文件中,其中包括数据库配置

需要注意的是,该文件中的 server.port 已不起作用(因为现在的服务器是外部 Tomcat,所以端口号要去 Tomcat 的配置文件中进行配置)。

Book-Manager 图书管理系统(基于SpringBoot、MyBatis)相关推荐

  1. 基于Springboot+mybatis+mysql+html图书管理系统2

    基于Springboot+mybatis+mysql+html图书管理系统2 一.系统介绍 二.功能展示 1.用户登陆 2.用户主页 3.图书查询 4.还书 5.个人信息修改 6.图书管理(管理员) ...

  2. 基于Springboot+mybatis+mysql+html图书管理系统

    基于Springboot+mybatis+mysql+html图书管理系统 一.系统介绍 二.功能展示 1.用户登陆 2.用户主页 3.图书查询 4.还书 5.个人信息修改 6.图书管理(管理员) 7 ...

  3. 基于springboot+mybatis+mysql+html实现宠物医院管理系统(包含实训报告)

    基于springboot+mybatis+mysql+html实现宠物医院管理系统(包含实训报告) 一.系统简介 二.系统主要功能界面 2.1登陆 2.2系统设置 2.3宠物管理 2.4预约管理 2. ...

  4. 基于springboot+mybatis+mysql+vue运动会报名管理系统

    基于springboot+mybatis+mysql+vue运动会报名管理系统 一.系统介绍 二.功能展示 1.用户登陆 2.报名详情(运行员) 3.比赛报名(运动员) 4.个人参赛项目(运动员) 5 ...

  5. 基于springboot+mybatis+mysql+vue房屋租赁管理系统

    基于springboot+mybatis+mysql+vue房屋租赁管理系统 一.系统介绍 二.功能展示 1.用户登陆 2.管理员端主要功能 2.房主角色端主要功能 3.租客角色端主要功能 三.其它系 ...

  6. 基于javaweb的平行志愿管理系统(java+springboot+mybatis+vue+mysql)

    基于javaweb的平行志愿管理系统(java+springboot+mybatis+vue+mysql) 运行环境 Java≥8.MySQL≥5.7.Node.js≥10 开发工具 后端:eclip ...

  7. 基于springboot+mybatis+mysql+html企业人事管理系统

    基于springboot+mybatis+mysql+html企业人事管理系统 一.系统介绍 二.功能展示 1.用户登陆 2.员工奖惩--员工 3.合同管理--员工 4.个人薪酬--员工 5.培训管理 ...

  8. 基于springboot+mybatis+jsp日用品商城管理系统

    基于springboot+mybatis+jsp日用品商城管理系统 一.系统介绍 二.功能展示 1.主页(客户) 2.登陆.注册(客户) 3.我的购物车(客户) 4.我的订单(客户) 5.我的商铺(商 ...

  9. 基于springboot+mybatis+mysql+html实现校园疫情防控管理系统

    基于springboot+mybatis+mysql+html实现校园疫情防控管理系统 一.系统介绍 二.采用技术及开发环境 1.开发技术 2.开发环境 二.功能展示 1.登陆 2.首页(管理员) 3 ...

  10. 基于springboot+mybatis+mysql+layui员工工资管理系统

    基于springboot+mybatis+mysql+layui员工工资管理系统 一.目的 二.需求 功能划分 系统结构设计 软件界面截图 三.系统开发配置 四.获取源码 一.目的 ​ 运用JavaE ...

最新文章

  1. win10+Linux双系统安装及一些配置问题
  2. [NOI2010]能量采集
  3. python装饰器类-python_类装饰器
  4. 最全的C#图片处理帮助类ImageHelper
  5. Kinect 动作识别组件概要设计
  6. cocos2d-x3.0 实现HTTP请求GET、POST
  7. oracle更换rac节点,Oracle-rac 更改VIP地址—2节点的
  8. 【计算机科学基础】计算机概述
  9. html文件整体结构,HTML文件基本结构
  10. 苹果今年预计生产8000万部iPhone 12,多还是少?
  11. Linux学习12—文件服务
  12. Mongo 多语言模糊匹配
  13. 战旗html5播放器为什么卡顿,视频站启用html5播放器
  14. CS5211:DP/eDP to 2Port LVDS
  15. SYN, FIN, ACK, PSH, RST, URG含义
  16. Delegate.Combine
  17. 要画分子结构图,就用ChemDraw
  18. mysql sql wait 写法_MySQL里的wait_timeout
  19. php单双引号的区别与foreach 遍历
  20. Simulink Desktop Real-Time

热门文章

  1. matlab闭环直流调速系统实验,实验三双闭环直流调速系统MATLAB仿真.doc
  2. 二阶系统响应指标图_自动控制理论_3.3 二阶系统的瞬态响应
  3. element ui 框架的优势_Element UI 框架
  4. 【软件工程】软件工程需求分析——结构化分析
  5. 【软件工程】二、需求分析——怎么提需求?,怎么写需求?
  6. 基于hilbert变换的数字信号_基于Hilbert变换数字调相信号解调算法研究.doc
  7. 拉普拉斯方程续有限差分法
  8. js实现斗地主计分器
  9. 基于大数据技术的全国高速公路通行数据 动态监测平台建设
  10. 电子商务概论(农)之形考作业三