在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 {
undefined
private String id;
private String psw;
undefined
public User() {
}
undefined
public User(String id, String psw) {
this.id = id;
this.psw = psw;
}
undefined
public String getId() {
return id;
}
undefined
public void setId(String id) {
this.id = id;
}
undefined
public String getPsw() {
return psw;
}
undefined
public void setPsw(String psw) {
this.psw = psw;
}
}
undefined
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); }
java;gutter:true;
package com.gao.service;</p>
<p>import com.gao.entity.User;</p>
<pre><code>
</code></pre>
<p>/*<em>
* 用户服务层接口
* @author gao
</em>/</p>
<pre><code>
;gutter:true;
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> <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> <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
点击提交
初次登录,可以注册密码账号,点击提交即可
Original: https://www.cnblogs.com/beibushan/p/16154006.html
Author: 北部山
Title: 基于Springboot+JSP+Mybatis实现的员工管理系统
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/685512/
转载文章受原作者版权保护。转载请注明原作者出处!