基於springboot+mybatis實現的員工管理系統,個人所學的聯繫,若雷同,請諒解 ...
在B站初學springboot整合mybatis,為了加深熟悉程度,於是就寫了這個漏洞百出的員工管理系統。好了。廢話不多說,開始!
不得作用於任何商業活動!!!!
1.環境準備
1.1 資料庫 mysql:8.0.26
1.2 maven:3.6.3
1.3 jdk:1.8
1.4 編輯器:IDEA 2022.1.2
eclipse 2018.09
1.5 mybatis 3.5.7
1.6 bootstrap 5.1.3
1.7 資料庫可視化工具 Navicat
1.7 字元集編碼 utf-8
2.環境搭建 (註:springboot本來是不建議使用jsp。)
2.1 項目結構圖如下
2.2此項目是基於maven創建的,為此可以利用eclipse中的springboot初始化工具進行創建。從官網上下載的eclipse中是沒有這個初始化工具的,為此,應另外安裝初始化工具,打開eclipse應用商店,搜索spring選擇如下圖所示,點擊下一步進行安裝即可。
項目搭建
點擊next
點擊next
點擊next,因為搭建的是web項目,所以選擇springWeb
點擊finish,項目搭建完成,如果pom.xml文件報錯,右鍵刷新即可。
2.3編輯application.yml文件
server: port: 8088 # 定義埠號 servlet: context-path: /springboot-02 # 指定項目名 jsp: init-parameters: development: true # 啟用jsp開發者模式:可以更改jsp頁面內容 #配置jsp模板 spring: mvc: view: prefix: / suffix: .jsp #資料庫配置 datasource: type: com.alibaba.druid.pool.DruidDataSource #利用德魯伊連接池 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/stu username: root password: 123456 #配置mybatis mybatis: mapper-locations: classpath:com/gao/mapper/*.xml type-aliases-package: com.gao.entity #配置日誌使用 logging: level: root: info com.gao: debug
2.4資料庫創建
/* Navicat Premium Data Transfer Source Server : MysqlLink Source Server Type : MySQL Source Server Version : 80026 Source Host : localhost:3306 Source Schema : stu Target Server Type : MySQL Target Server Version : 80026 File Encoding : 65001 Date: 21/03/2022 00:02:45 */ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for book -- ---------------------------- DROP TABLE IF EXISTS `book`; CREATE TABLE `book` ( `bno` varchar(6) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `price` float NULL DEFAULT NULL, `author` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `publish` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of book -- ---------------------------- INSERT INTO `book` VALUES ('B00003', '新視界英語', 23.4, '張珊', '外語研究出版社'); INSERT INTO `book` VALUES ('B00004', 'vue高級設計', 50.23, '尤玉溪', '機械工業出版社'); INSERT INTO `book` VALUES ('B00005', 'C#高級程式實戰', 50.23, '微軟', '電子機械工業出版社'); INSERT INTO `book` VALUES ('B00006', 'C語言', 3.33, '毛人鳳', '南陽出版社'); INSERT INTO `book` VALUES (NULL, NULL, 0, NULL, NULL); INSERT INTO `book` VALUES (NULL, NULL, 0, NULL, NULL); INSERT INTO `book` VALUES (NULL, NULL, 0, NULL, NULL); INSERT INTO `book` VALUES (NULL, NULL, 0, NULL, NULL); INSERT INTO `book` VALUES (NULL, NULL, 0, NULL, NULL); -- ---------------------------- -- Table structure for cad -- ---------------------------- DROP TABLE IF EXISTS `cad`; CREATE TABLE `cad` ( `id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '編號', `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '姓名', `tel` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '電話號碼' ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '測試表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of cad -- ---------------------------- INSERT INTO `cad` VALUES ('1', '李飛', '1120'); INSERT INTO `cad` VALUES ('2', '1', '123'); INSERT INTO `cad` VALUES ('3', '2', '234'); INSERT INTO `cad` VALUES ('4', '3', '456'); INSERT INTO `cad` VALUES ('5', '4', '678'); -- ---------------------------- -- Table structure for emp -- ---------------------------- DROP TABLE IF EXISTS `emp`; CREATE TABLE `emp` ( `ebno` varchar(15) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '員工銷售圖書編號', `eeno` varchar(15) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '員工編號', PRIMARY KEY (`eeno`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of emp -- ---------------------------- INSERT INTO `emp` VALUES ('B00001', 'e001'); INSERT INTO `emp` VALUES ('B00002', 'e002'); INSERT INTO `emp` VALUES ('B00003', 'e003'); INSERT INTO `emp` VALUES ('B00004', 'e004'); -- ---------------------------- -- Table structure for employee -- ---------------------------- DROP TABLE IF EXISTS `employee`; CREATE TABLE `employee` ( `eno` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, `pname` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, `age` int NOT NULL, `sex` enum('男','女') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, `department` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, PRIMARY KEY (`eno`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of employee -- ---------------------------- INSERT INTO `employee` VALUES ('e001', '戰英傑', 36, '男', '銷售二部'); INSERT INTO `employee` VALUES ('e002', '李國立', 24, '男', '銷售一部'); INSERT INTO `employee` VALUES ('e003', '張顯英', 30, '女', '銷售二部'); INSERT INTO `employee` VALUES ('e004', '李飛', 18, '男', '設計部'); INSERT INTO `employee` VALUES ('e006', '劉子凱', 28, '男', '硬體開發部'); INSERT INTO `employee` VALUES ('e008', '孫寶紅', 21, '女', '策劃部'); -- ---------------------------- -- Table structure for sale -- ---------------------------- DROP TABLE IF EXISTS `sale`; CREATE TABLE `sale` ( `bno` varchar(6) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `eno` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `quantity` int NULL DEFAULT NULL, `time` date NULL DEFAULT NULL, INDEX `FK_SA`(`eno`) USING BTREE, CONSTRAINT `FK_SA` FOREIGN KEY (`eno`) REFERENCES `emp` (`eeno`) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of sale -- ---------------------------- INSERT INTO `sale` VALUES ('B00001', 'e001', 1020, '2021-05-09'); INSERT INTO `sale` VALUES ('B00001', 'e002', 2030, '2021-09-12'); INSERT INTO `sale` VALUES ('B00002', 'e001', 300, '2021-03-04'); INSERT INTO `sale` VALUES ('B00003', 'e003', 503, '2021-01-09'); -- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, `psw` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of user -- ---------------------------- INSERT INTO `user` VALUES ('001', '7878'); INSERT INTO `user` VALUES ('0401200606', '280017'); INSERT INTO `user` VALUES ('0401200612', '7878'); INSERT INTO `user` VALUES ('0401200859', '123456'); INSERT INTO `user` VALUES ('0407200213', '456789'); INSERT INTO `user` VALUES ('0411200311', '123456'); INSERT INTO `user` VALUES ('admin', '123'); INSERT INTO `user` VALUES ('AI', '110'); INSERT INTO `user` VALUES ('CAD', '345'); -- ---------------------------- -- View structure for v_sc -- ---------------------------- DROP VIEW IF EXISTS `v_sc`; CREATE ALGORITHM = UNDEFINED SQL SECURITY DEFINER VIEW `v_sc` AS select `book`.`bno` AS `bno`,`book`.`name` AS `name`,`book`.`publish` AS `publish`,`sale`.`quantity` AS `quantity` from (`book` join `sale`) where (`book`.`bno` = `sale`.`bno`); SET FOREIGN_KEY_CHECKS = 1;
2.5 工具類:實現驗證碼
package com.gao.util; import javax.imageio.ImageIO; import java.awt.*; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.Arrays; import java.util.Random; /** * 生成驗證碼工具類 , 添加噪點以及扭曲 */ public class CaptchaUtil { public static final String VERIFY_CODES = "123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; private static Random random = new Random(); /** * 使用系統預設字元源生成驗證碼 * @param verifySize 驗證碼長度 * @return */ public static String generateVerifyCode(int verifySize){ return generateVerifyCode(verifySize, VERIFY_CODES); } /** * 使用指定源生成驗證碼 * @param verifySize 驗證碼長度 * @param sources 驗證碼字元源 * @return */ public static String generateVerifyCode(int verifySize, String sources){ // 未設定展示源的字碼,賦預設值大寫字母+數字 if(sources == null || sources.length() == 0){ sources = VERIFY_CODES; } int codesLen = sources.length(); Random rand = new Random(System.currentTimeMillis()); StringBuilder verifyCode = new StringBuilder(verifySize); for(int i = 0; i < verifySize; i++){ verifyCode.append(sources.charAt(rand.nextInt(codesLen-1))); } return verifyCode.toString(); } /** * 生成隨機驗證碼文件,並返回驗證碼值 (生成圖片形式,用的較少) * @param w * @param h * @param outputFile * @param verifySize * @return * @throws IOException */ public static String outputVerifyImage(int w, int h, File outputFile, int verifySize) throws IOException { String verifyCode = generateVerifyCode(verifySize); outputImage(w, h, outputFile, verifyCode); return verifyCode; } /** * 輸出隨機驗證碼圖片流,並返回驗證碼值(一般傳入輸入流,響應response頁面端,Web項目用的較多) * @param w * @param h * @param os * @param verifySize * @return * @throws IOException */ public static String outputVerifyImage(int w, int h, OutputStream os, int verifySize) throws IOException{ String verifyCode = generateVerifyCode(verifySize); outputImage(w, h, os, verifyCode); return verifyCode; } /** * 生成指定驗證碼圖像文件 * @param w * @param h * @param outputFile * @param code * @throws IOException */ public static void outputImage(int w, int h, File outputFile, String code) throws IOException{ if(outputFile == null){ return; } File dir = outputFile.getParentFile(); //文件不存在 if(!dir.exists()){ //創建 dir.mkdirs(); } try{ outputFile.createNewFile(); FileOutputStream fos = new FileOutputStream(outputFile); outputImage(w, h, fos, code); fos.close(); } catch(IOException e){ throw e; } } /** * 輸出指定驗證碼圖片流 * @param w * @param h * @param os * @param code * @throws IOException */ public static void outputImage(int w, int h, OutputStream os, String code) throws IOException{ int verifySize = code.length(); BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); Random rand = new Random(); Graphics2D g2 = image.createGraphics(); g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON); // 創建顏色集合,使用java.awt包下的類 Color[] colors = new Color[5]; Color[] colorSpaces = new Color[] { Color.WHITE, Color.CYAN, Color.GRAY, Color.LIGHT_GRAY, Color.MAGENTA, Color.ORANGE, Color.PINK, Color.YELLOW }; float[] fractions = new float[colors.length]; for(int i = 0; i