在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 < colors.length; i++){ colors[i] = colorSpaces[rand.nextInt(colorSpaces.length)]; fractions[i] = rand.nextFloat(); } Arrays.sort(fractions); // 設定邊框色 g2.setColor(Color.GRAY); g2.fillRect(0, 0, w, h); Color c = getRandColor(200, 250); // 設定背景色 g2.setColor(c); g2.fillRect(0, 2, w, h-4); // 繪制干擾線 Random random = new Random(); // 設定線條的顏色 g2.setColor(getRandColor(160, 200)); for (int i = 0; i < 20; i++) { int x = random.nextInt(w - 1); int y = random.nextInt(h - 1); int xl = random.nextInt(6) + 1; int yl = random.nextInt(12) + 1; g2.drawLine(x, y, x + xl + 40, y + yl + 20); } // 添加噪點 // 噪聲率 float yawpRate = 0.05f; int area = (int) (yawpRate * w * h); for (int i = 0; i < area; i++) { int x = random.nextInt(w); int y = random.nextInt(h); // 獲取隨機顏色 int rgb = getRandomIntColor(); image.setRGB(x, y, rgb); } // 添加圖片扭曲 shear(g2, w, h, c); g2.setColor(getRandColor(100, 160)); int fontSize = h-4; Font font = new Font("Algerian", Font.ITALIC, fontSize); g2.setFont(font); char[] chars = code.toCharArray(); for(int i = 0; i < verifySize; i++){ AffineTransform affine = new AffineTransform(); affine.setToRotation(Math.PI / 4 * rand.nextDouble() * (rand.nextBoolean() ? 1 : -1), (w / verifySize) * i + fontSize/2, h/2); g2.setTransform(affine); g2.drawChars(chars, i, 1, ((w-10) / verifySize) * i + 5, h/2 + fontSize/2 - 10); } g2.dispose(); ImageIO.write(image, "jpg", os); } /** * 隨機顏色 * @param fc * @param bc * @return */ private static Color getRandColor(int fc, int bc) { if (fc > 255){ fc = 255; } if (bc > 255){ bc = 255; } int r = fc + random.nextInt(bc - fc); int g = fc + random.nextInt(bc - fc); int b = fc + random.nextInt(bc - fc); return new Color(r, g, b); } private static int getRandomIntColor() { int[] rgb = getRandomRgb(); int color = 0; for (int c : rgb) { color = color << 8; color = color | c; } return color; } private static int[] getRandomRgb() { int[] rgb = new int[3]; for (int i = 0; i < 3; i++) { rgb[i] = random.nextInt(255); } return rgb; } private static void shear(Graphics g, int w1, int h1, Color color) { shearX(g, w1, h1, color); shearY(g, w1, h1, color); } private static void shearX(Graphics g, int w1, int h1, Color color) { int period = random.nextInt(2); boolean borderGap = true; int frames = 1; int phase = random.nextInt(2); for (int i = 0; i < h1; i++) { double d = (double) (period >> 1) * Math.sin((double) i / (double) period + (6.2831853071795862D * (double) phase) / (double) frames); g.copyArea(0, i, w1, 1, (int) d, 0); if (borderGap) { g.setColor(color); g.drawLine((int) d, i, 0, i); g.drawLine((int) d + w1, i, w1, i); } } } private static void shearY(Graphics g, int w1, int h1, Color color) { int period = random.nextInt(40) + 10; // 50; boolean borderGap = true; int frames = 20; int phase = 7; for (int i = 0; i < w1; i++) { double d = (double) (period >> 1) * Math.sin((double) i / (double) period + (6.2831853071795862D * (double) phase) / (double) frames); g.copyArea(i, 0, 1, h1, 0, (int) d); if (borderGap) { g.setColor(color); g.drawLine(i, (int) d, i, 0); g.drawLine(i, (int) d + h1, i, h1); } } } }
2.6 控制層
用戶
package com.gao.controller; import com.gao.entity.User; import com.gao.service.EmployeeService; import com.gao.service.userService; import com.gao.util.CaptchaUtil; import lombok.SneakyThrows; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; /** * @author gao */ @Controller @RequestMapping("/user") public class UserController { /* * 控制臺列印日志 * */ private Logger log = LoggerFactory.getLogger(UserController.class); /* * 注入服務層 */ private userService userService; @Autowired public UserController(userService userService) { this.userService = userService; } /* * 用戶注冊 * * */ @SneakyThrows @RequestMapping("register") public String register(User user,String code,HttpSession session) throws UnsupportedEncodingException{ log.debug("接收到的驗證碼:{}",code); log.debug("用戶名:{},密碼:{}",user.getId(),user.getPsw()); try{ String sessionCode = session.getAttribute("code").toString(); if(!sessionCode.equalsIgnoreCase(code)) { throw new RuntimeException("驗證碼錯誤!!"); } userService.register(user); }catch(RuntimeException e){ e.printStackTrace(); return "redirect:/register.jsp?msg="+ URLEncoder.encode(e.getMessage(),"UTF-8"); } return "redirect:/login.jsp"; } /* * 用戶登錄 * */ @RequestMapping("login") public String login(String id,String psw,HttpSession session) throws UnsupportedEncodingException { log.debug("接收到的用戶名:{},接收到的用戶密碼:{}",id,psw); try{ User user = userService.login(id,psw); //登錄成功 session.setAttribute("user",user); }catch (Exception e){ e.printStackTrace(); return "redirect:/login.jsp?msg="+URLEncoder.encode(e.getMessage(),"UTF-8"); } return "redirect:/employee/list"; } //驗證碼實作層 @RequestMapping("checkCode") public void getCheckCode(HttpSession session, HttpServletResponse response){ String code = CaptchaUtil.generateVerifyCode(4); session.setAttribute("code",code); response.setContentType("image/png"); try { ServletOutputStream os = response.getOutputStream(); } catch (IOException e) { e.printStackTrace(); } try { CaptchaUtil.outputImage(220,60,response.getOutputStream(),code); } catch (IOException e) { e.printStackTrace(); } } }
員工
package com.gao.controller; import com.gao.entity.Employee; import com.gao.service.EmployeeService; import lombok.SneakyThrows; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import javax.servlet.http.HttpServletRequest; import java.util.List; /** * 員工控制器 * @author gao */ @Controller @RequestMapping("/employee") public class EmployeeController { /* * 注入日志 */ private Logger log = LoggerFactory.getLogger(EmployeeController.class); private EmployeeService employeeService; @Autowired public EmployeeController(EmployeeService employeeService) { this.employeeService = employeeService; } /** * 員工串列 */ @RequestMapping("list") public String listEmployee(Model model, HttpServletRequest request){ List<Employee> employees = employeeService.list(); model.addAttribute("employees",employees); return "emplist"; } /* * 添加員工資訊 */ @SneakyThrows @RequestMapping("added") public String addEmp(Employee employee){ log.debug("員工編號:{}",employee.getEno()); log.debug("員工姓名:{}",employee.getPname()); log.debug("員工年齡:{}",employee.getAge()); log.debug("員工性別:{}",employee.getSex()); log.debug("員工部門:{}",employee.getDepartment()); //保存員工資訊 employeeService.add(employee); return "redirect:/employee/list"; } //更新員工資訊 @RequestMapping("updateEmployee") public String updateEmp(String eno,Model model){ log.debug("接收的ID:{}",eno); //根據員工ID查詢員工資訊 Employee employee = employeeService.idByEmp(eno); //存入作用域 model.addAttribute("employee",employee); return "updateEmp"; } //更新員工資訊1 @RequestMapping("uep") public String updateEmployeePlus(Employee employee){ log.debug("員工編號:{}",employee.getEno()); log.debug("員工姓名:{}",employee.getPname()); log.debug("員工年齡:{}",employee.getAge()); log.debug("員工性別:{}",employee.getSex()); log.debug("員工部門:{}",employee.getDepartment()); employeeService.uemp(employee); return "redirect:/employee/list"; } //洗掉員工 @RequestMapping("del") public String delEmp(String eno){ log.debug("接收的員工ID{}:",eno); employeeService.dele(eno); return "redirect:/employee/list"; } }
2.7 物體層
package com.gao.entity; /** * 員工物體類 * @author gao */ public class Employee { private String eno; private String pname; private int age; private String sex; private String department; public Employee() { } public Employee(String eno, String pname, Integer age, String sex, String department) { this.eno = eno; this.pname = pname; this.age = age; this.sex = sex; this.department = department; } public String getEno() { return eno; } public void setEno(String eno) { this.eno = eno; } public String getPname() { return pname; } public void setPname(String pname) { this.pname = pname; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getDepartment() { return department; } public void setDepartment(String department) { this.department = department; } public void add(Employee employee) { } }
=======================================================================================================================================================================
package com.gao.entity;
/** * 用戶物體類 * @author gao */
public class User {
private String id;
private String psw;
public User() {
}
public User(String id, String psw) {
this.id = id;
this.psw = psw;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPsw() {
return psw;
}
public void setPsw(String psw) {
this.psw = psw;
}
}
2.8 持久層
員工
package com.gao.dao; import com.gao.entity.Employee; import java.util.List; public interface EmployeeDao { //查詢員工所有資訊 List<Employee> list(); //添加員工資訊 void add(Employee employee); //根據員工ID查詢員工資訊 Employee idByEmp(String eno); //更新員工個人資訊 void uemp(Employee employee); //洗掉員工 void dele(String eno); }
用戶
package com.gao.dao; import com.gao.entity.User; public interface userDao { //查詢用戶 User findByUserId(String id); //注冊用戶 void save(User user); //洗掉用戶 void del(User user); //修改用戶 void upda(User user); }
2.9 服務層
package com.gao.service; import com.gao.entity.Employee; import java.util.List; /** * 員工服務層介面 * @author gao */ public interface EmployeeService { //員工串列 List<Employee> list(); //添加員工資訊 void add(Employee employee); //根據員工ID查詢員工資訊 Employee idByEmp(String eno); //更新員工個人資訊 void uemp(Employee employee); //洗掉員工資訊 void dele(String eno); }
package com.gao.service; import com.gao.entity.User;
/** * 用戶服務層介面 * @author gao */
public interface userService {
//用戶注冊
void register(User user);
//用戶登錄
User login(String id, String psw);
//洗掉用戶
User delUser(String id,String psw); }
2.10 服務層的實作層
package com.gao.service.impl; import com.gao.dao.EmployeeDao; import com.gao.entity.Employee; import com.gao.service.EmployeeService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; @Service @Transactional //控制事務 public class EmployeeServiceImpl implements EmployeeService { private EmployeeDao employeeDao; @Autowired public EmployeeServiceImpl(EmployeeDao employeeDao) { this.employeeDao = employeeDao; } @Override public List<Employee> list() { return this.employeeDao.list(); } //添加員工 @Override public void add(Employee employee) { employeeDao.add(employee); } //根據員工ID查詢員工資訊 @Override public Employee idByEmp(String eno) { return employeeDao.idByEmp(eno); } //更新員工個人資訊 @Override public void uemp(Employee employee) { employeeDao.uemp(employee); } @Override public void dele(String eno) { employeeDao.dele(eno); } }
package com.gao.service.impl; import com.gao.dao.userDao; import com.gao.entity.User; import com.gao.service.userService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.DigestUtils; import org.springframework.util.ObjectUtils; import java.nio.charset.StandardCharsets; /** * @author gao */ @Service @Transactional public class userServiceImpl implements userService { //自動注入 private userDao userDao; @Autowired public userServiceImpl(userDao userDao) { this.userDao = userDao; } @Override public void register(User user) { //1.根據用戶查詢資料庫是否存在該用戶 User userDB = userDao.findByUserId(user.getId()); if(!ObjectUtils.isEmpty(userDB)) { throw new RuntimeException("用戶名已經存在!!!"); } // String passwordSecret = DigestUtils.md5DigestAsHex(user.getPsw().getBytes(StandardCharsets.UTF_8)); // user.setPsw(passwordSecret); //密碼加密碼 userDao.save(user); } /* * 用戶登錄實作類 * */ @Override public User login(String id, String psw) { //根據用戶輸入的用戶名查詢資料庫中是否存在! User user = userDao.findByUserId(id); //判斷物件是否存在 if (ObjectUtils.isEmpty(user)) { throw new RuntimeException("用戶名輸入錯誤!!!!"); } //判斷密碼正確性 if (!user.getPsw().equals(psw)) { throw new RuntimeException("用戶密碼輸入錯誤!!"); } return user; } /* * 用戶注銷 * */ @Override public User delUser(String id, String psw) { return null; } }
2.11 用戶和員工的mapper檔案
2.11.1 用戶
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.gao.dao.userDao"> <select id="findByUserId" parameterType="String" resultType="User"> select id,psw from user where id = #{id}; </select> <!--注冊用戶--> <insert id="save" parameterType="User" useGeneratedKeys="true" keyProperty="id"> insert into user values(#{id},#{psw}) </insert> </mapper>
2.11.2 員工
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.gao.dao.EmployeeDao"> <!--查詢所有用戶--> <select id="list" resultType="Employee"> select eno,pname,age,sex,department from employee </select> <!--洗掉用戶--> <delete id="del"> delete from employee where eno = #{eno} </delete> <!--添加用戶--> <insert id="add" parameterType="Employee" useGeneratedKeys="true" keyProperty="eno"> insert into employee values(#{eno},#{pname},#{age},#{sex},#{department}) </insert> <!--根據員工ID查詢員工資訊--> <select id="idByEmp" parameterType="String" resultType="Employee"> select eno,pname,age,sex,department from employee where eno = #{eno} </select> <!--更新員工個人資訊--> <update id="uemp" parameterType="Employee"> update employee set pname = #{pname},age = #{age},sex = #{sex},department = #{department} where eno = #{eno} </update> <!--根據id洗掉員工資訊--> <delete id="dele" parameterType="String"> delete from employee where eno = #{eno}; </delete> </mapper>
2.12 專案啟動類
package com.gao; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication @MapperScan("com/gao/dao") public class Springboot02Application { public static void main(String[] args) { SpringApplication.run(Springboot02Application.class, args); System.out.println("服務器啟動成功..."); } }
2.13 webapp檔案
訪問百度網盤 :
鏈接:https://pan.baidu.com/s/1rqQoqm8u7ZtuRG6tyHmy8Q
提取碼:cbj7
2.14 啟動專案,在瀏覽器輸入 http://127.0.0.1:8088/springboot-02/login.jsp

輸入賬號密碼
賬號:0401200606
密碼:280017
點擊提交

初次登錄,可以注冊密碼賬號,點擊提交即可

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/458370.html
標籤:其他
上一篇:執行緒池設計與實作
下一篇:java學習之多執行緒
