BM 是 BookManager 的缩写。
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 包,进行外部服务器部署
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(BookManagerApplication.class);
}
}
然后,再次使用 maven
打包:
打包成功后,会在 target
目录下生成一个 book-manager-0.0.1-SNAPSHOT.war
文件,将其重命名为 book-manager.war
,放入 tomcat 的 webapps
目录中。
然后需要配置 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 的配置文件中进行配置)。