# book-manager **Repository Path**: codeshellme/book-manager ## Basic Information - **Project Name**: book-manager - **Description**: book-manager 是一套图书管理系统,前端界面使用了 EasyUI 框架,后端基于SpringBoot+MyBatis 实现。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: https://codeshellme.github.io/ - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 2 - **Created**: 2021-12-05 - **Last Updated**: 2025-04-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: SpringBoot, Spring-MVC, MySQL, MyBatis, EasyUI ## README ### 1,项目介绍 [book-manager](https://gitee.com/codeshellme/book-manager) 是一套图书管理系统,前端界面使用了 [EasyUI](https://www.jeasyui.net/) 框架,后端基于SpringBoot+MyBatis 实现。 本系统包含首页门户、系统管理、权限管理、图书管理等模块。 ### 2,技术选型 ***主要技术*** | 技术 | 说明 | 官网 | |:--|:--|:--| | **Java** | 后端语言 | [https://www.java.com/zh-CN/](https://www.java.com/zh-CN/) | | **MySQL** | 数据库 | [https://www.mysql.com/](https://www.mysql.com/) | ***前端技术框架*** | 技术 | 说明 | 官网 | |:--|:--|:--| | **JQuery** | JavaScript 库 | [https://jquery.com/](https://jquery.com/) | | **EasyUI** | Web UI 框架 | [https://www.jeasyui.net/](https://www.jeasyui.net/) | ***后端技术框架*** | 技术 | 说明 | 官网 | |:--|:--|:--| | **SpringBoot** | 容器+MVC框架 | [https://spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) | | **SpringSecurity** | 认证和授权框架 | [https://spring.io/projects/spring-security](https://spring.io/projects/spring-security) | | **JWT** | JWT 登录支持 | [https://github.com/jwtk/jjwt](https://github.com/jwtk/jjwt) | | **MyBatis** | ORM 框架 | [http://www.mybatis.org/mybatis-3/zh/index.html](http://www.mybatis.org/mybatis-3/zh/index.html) | | **Lombok** | Java 对象封装工具 | [https://github.com/rzwitserloot/lombok](https://github.com/rzwitserloot/lombok) | | **PageHelper** | MyBatis 分页插件 | [https://pagehelper.github.io](https://pagehelper.github.io) | | **Hutool** | Java 工具类库 | [https://www.hutool.cn](https://www.hutool.cn) | | **Maven** | 项目构建工具 | [https://maven.apache.org](https://maven.apache.org) | ***开发工具*** | 工具 | 说明 | 官网 | |:--|:--|:--| | **IDEA** | Java 集成开发环境 | [https://www.jetbrains.com/idea/download/](https://www.jetbrains.com/idea/download/) | | **X-shell** | Linux 远程连接工具 | [https://www.netsarang.com/zh/all-downloads/](https://www.netsarang.com/zh/all-downloads/) | | **Navicat** | 数据库连接工具 | [https://www.navicat.com.cn](https://www.navicat.com.cn) | | **Git** | 版本控制工具 | [https://git-scm.com](https://git-scm.com) | | **Typora** | Markdown 编辑器 | [https://typora.io/](https://typora.io/) | ***Idea 插件*** 这里介绍两个 Idea 插件(`File -> Settings -> Plugins`): - Lombok - Free MyBatis plugin 因为项目中使用了 **Lombok**,所以 **Lombok** 插件是必须的;**Free MyBatis plugin** 可以实现 Dao 层接口到 Mapper 文件的跳转。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/67c11e9cc08747419c230b1e5e04e4ba.png) ### 3,数据库构建 数据库使用的是 MySQL。 #### 1,创建库 新建 `book` 数据库: ![在这里插入图片描述](https://img-blog.csdnimg.cn/0d3fe135b358450fb2eb072a7ca0c34e.png) ```sql CREATE DATABASE `book` CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'; ``` #### 2,创建表 1,创建**用户表** `ums_user`: ```sql -- 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`: ```sql -- 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`: ```sql -- 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`: ```sql -- 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`: ```sql -- 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`: ```sql -- 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`: ```sql -- 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`: ```sql -- 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`: ```sql -- 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,用户首页 ![在这里插入图片描述](https://img-blog.csdnimg.cn/df58775787ef4553a2818e21c6424df2.png?) #### 2,登录界面 ![在这里插入图片描述](https://img-blog.csdnimg.cn/c9c076a7857c4dac9f622e0424f49385.png?) #### 3,菜单列表 目前的菜单列表如下: ![在这里插入图片描述](https://img-blog.csdnimg.cn/d1cfd59738524b6683b3e18ac92bcb6f.png) 分别有: - **权限管理**:包括菜单管理,角色管理和用户管理 - **菜单管理**:管理整个系统的菜单,每项菜单对应不同的功能 - **角色管理**:管理整个系统的角色,每个角色可配置不同的菜单功能,比如: - `super` 角色拥有系统的最高权限,拥有系统中的所有功能 - `manager` 角色主要分配给图书管理员,可以拥有图书管理和系统管理功能,但不能拥有权限管理功能 - **用户管理**:管理整个系统的用户,每个用户只能属于一种角色,拥有所属角色的所有功能 - **图书管理**:主要用于管理图书 - **图书条目**:最基础的图书信息 - **图书库存**:代表图书馆中的所有图书库存,所有能进入库存的图书,都必须先进入图书条目 - **图书借阅**:图书借阅相关功能,只有在库存中的图书才能被借阅 - 以上三者的范围关系为:图书条目 >= 图书库存 >= 图书借阅 - **系统管理**: - **字典管理**:管理一些基础信息,比如图书都有哪些类型,作者的国籍都有哪些等 - **作者管理**:每本书都有作者,该功能管理了系统中所有的作者信息 #### 4,菜单管理 ![在这里插入图片描述](https://img-blog.csdnimg.cn/43d67777b9864faea1f6615f0e1513fb.png?) #### 5,角色管理 ![在这里插入图片描述](https://img-blog.csdnimg.cn/81ff9d72270f404ab9c3145f38b49654.png) #### 6,用户管理 ![在这里插入图片描述](https://img-blog.csdnimg.cn/47b0cb380c9c4c27bf2f4ac4c2030f8e.png) #### 7,图书条目 ![在这里插入图片描述](https://img-blog.csdnimg.cn/89c6dd82651f4e2fbb24358f40379cee.png) #### 8,图书库存 ![在这里插入图片描述](https://img-blog.csdnimg.cn/9d6e37c9177d4c5eb171dbb76c77c200.png?) #### 9,图书借阅 ![在这里插入图片描述](https://img-blog.csdnimg.cn/6eb2158715554643bedc4cf5d927e34a.png?) #### 10,字典管理 ![在这里插入图片描述](https://img-blog.csdnimg.cn/55fbc128fab64275aea102fed1cbb966.png?) #### 11,作者管理 ![在这里插入图片描述](https://img-blog.csdnimg.cn/f17a0af44ff447c695d84aad4a540148.png?) ### 6,项目部署 下面介绍两种部署服务的方式: - 以 **jar** 包方式部署 - 此方式使用 **springboot 内置的 tomcat** 运行 - 以 **war** 包方式部署 - 此方式使用外部 Tomcat #### 1,以 jar 包方式部署 用 Idea 打 jar 包非常方便,无需修改任何 `pom.xml` 配置,先双击 `clean`,然后双击 `package`,就可打成 jar 包。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/63409bf2bb264dfb9aaeae7d4214bc75.png) 打包成功后,会在 `target` 目录下生成一个 `book-manager-0.0.1-SNAPSHOT.jar` 文件,直接用 `java` 命令运行它即可启动项目: ```shell > java -jar book-manager-0.0.1-SNAPSHOT.jar ``` #### 2,以 war 包方式部署 首先需在 `pom.xml` 中加入打包方式: ```xml war ``` 然后,启动类 `BookManagerApplication` 继承 `SpringBootServletInitializer`,并覆盖 `configure` 方法: ```java @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` 打包: ![在这里插入图片描述](https://img-blog.csdnimg.cn/63409bf2bb264dfb9aaeae7d4214bc75.png) 打包成功后,会在 `target` 目录下生成一个 `book-manager-0.0.1-SNAPSHOT.war` 文件,将其重命名为 `book-manager.war`,放入 **tomcat** 的 `webapps` 目录中。 然后需要配置 Tomcat 的配置文件 `server.xml`,其中可设置服务器端口号等信息,我们需在 `Server>Service>Engine>Host` 标签内加入下面配置: ```xml ``` 最后启动 **Tomcat** 即可。 另外,关于 **springboot** 相关的配置在 `Tomcat根目录\webapps\book-manager\WEB-INF\classes\application.properties` 文件中,其中包括**数据库配置**。 需要注意的是,该文件中的 `server.port` 已不起作用(因为现在的服务器是外部 Tomcat,所以端口号要去 Tomcat 的配置文件中进行配置)。