使用SpringMVC框架实现员工管理系统

该博客详细介绍了如何使用SpringMVC框架构建一个简单的员工管理系统,包括创建实体类、数据源、数据访问层、服务层和控制层。通过模拟数据展示了各层之间的交互,实现了员工信息的增删改查功能,并阐述了SpringMVC框架带来的好处,如代码复用、快速开发等。
摘要由CSDN通过智能技术生成
思路拓展:
1.创建实体类(entity)
2.创建数据源(EmployeeDataSource)
3.创建数据访问层(Data Access Object)
4.创建服务层(Service)
5.创建控制层(Controller)

思路具体的实现:
1.数据源调实体类,然后把数据存放到集合中,因为我们没有数据库,只能用集合充当数据库。
2.数据访问层调用数据源,充当它的数据访问对象。
3.服务层调用数据访问层,因为服务层是业务类。
4.控制层调用服务层,因为每一个控制器是由若干个业务逻辑组成的。


使用SpringMVC框架实现的好处:
1.可以提高代码的重用性和维护性
2.框架搭建好之后可以快速的进行操作
3.层次分明,一目了然
4.可以大大的减少实现员工管理系统的时间
----------------------------------------------------------------------------------------

1.实体类包(entity)

package cn.axukt.empsys.lesson2.entity;

public class Employee {
    private String empId;
    private String empName;
    private String gender;
    private int age;
    private String homeTown;
    private double salary;

    public Employee() {
    }

    public Employee(String empId, String empName, String gender, int age, String homeTown, double salary) {
        this.empId = empId;
        this.empName = empName;
        this.gender = gender;
        this.age = age;
        this.homeTown = homeTown;
        this.salary = salary;
    }

    public String getEmpId() {
        return empId;
    }

    public void setEmpId(String empId) {
        this.empId = empId;
    }

    public String getEmpName() {
        return empName;
    }

    public void setEmpName(String empName) {
        this.empName = empName;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getHomeTown() {
        return homeTown;
    }

    public void setHomeTown(String homeTown) {
        this.homeTown = homeTown;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }
}


public class Account {
    private String id;
    private String userName;
    private String passWord;

    public Account() {
    }

    public Account(String id, String userName, String passWord) {
        this.id = id;
        this.userName = userName;
        this.passWord = passWord;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassWord() {
        return passWord;
    }

    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }
}

----------------------------------------------------------------------------------------
2.数据包(data)

package cn.axukt.empsys.lesson2.data;

import cn.axukt.empsys.lesson2.entity.Account;
import cn.axukt.empsys.lesson2.entity.Employee;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class EmployeeDataSource {
    //创建员工数据源
   static List<Employee> list=new ArrayList<Employee>();
    //初始化员工数据源
    public static List<Employee> initEmployeeDataSource(){
        list.add(new Employee("tst2005010001","王明","男",26,"河南省许昌市",6000));
        list.add(new Employee("tst2005020006","张馨予","男",27,"河南省平顶山市",5800));
        return list;
    }
    //创建账户数据源
    static  Map<String, Account> map=new HashMap<String, Account>();
    //初始化账户数据源
    public  static Map<String,Account> initAccountDataSource(){
        map.put("",new Account("123123123113","ROSE","1005"));
        map.put("",new Account("13123123123","Jay","123"));
        return map;
    }
}

3.数据访问层(dao)

package cn.axukt.empsys.lesson2.dao;
import cn.axukt.empsys.lesson2.entity.Employee;
import java.util.List;

public interface EmployeeDao {
    //查询所有员工信息
    public List<Employee> queryEmployeeList();
    //添加员工
    public void addEmployee(Employee employee);
    //根据empId删除员工
    public void deleteEmployee(String empId);
    //根据empId修改员工信息
    public void modifyEmployeeInfo(Employee employee);
    //根据empId查询相应的员工信息
    public Employee queryEmployeeInfo(String empId);
}

public interface AccountDao {
    //验证用户是否合法
    public boolean verifyUser(String userName,String passWord);
}

实现类(impl)

package cn.axukt.empsys.lesson2.dao.impl;

import cn.axukt.empsys.lesson2.dao.EmployeeDao;
import cn.axukt.empsys.lesson2.data.EmployeeDataSource;
import cn.axukt.empsys.lesson2.entity.Employee;

import java.util.ArrayList;
import java.util.List;

public class EmpDaoImp implements EmployeeDao {
    //注入员工数据源
    List<Employee>list=new ArrayList<Employee>();
    //初始化员工数据源
    public EmpDaoImp(){
        list = EmployeeDataSource.initEmployeeDataSource();
    }
    @Override
    public List<Employee> queryEmployeeList() {
        return  list;
    }

    @Override
    public void addEmployee(Employee employee) {
        list.add(employee);
    }

    @Override
    public void deleteEmployee(String empId) {
        for (Employee e:list) {
            if (empId.equals(e.getEmpId())){
                list.remove(e);
            }
        }
    }

    @Override
    public void modifyEmployeeInfo(Employee employee) {
            employee=null;
        for (Employee e:list) {
            if (employee.getEmpId().equals(e.getEmpId())){
                employee=e;
            }
        }
    }

    @Override
    public Employee queryEmployeeInfo(String empId) {
        Employee employee=null;
        for (Employee e:list) {
            if (empId.equals(e.getEmpId())){
                employee=e;
        }
        }
        return employee;
    }
}

package cn.axukt.empsys.lesson2.dao.impl;

import cn.axukt.empsys.lesson2.dao.AccountDao;
import cn.axukt.empsys.lesson2.data.EmployeeDataSource;
import cn.axukt.empsys.lesson2.entity.Account;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class AccountDaoImp implements AccountDao {
    //注入数据源
    Map<String, Account> map=new HashMap<String, Account>();
    //初始化账户数据源
    public AccountDaoImp(){
        map=EmployeeDataSource.initAccountDataSource();
    }
    @Override
    public boolean verifyUser(String userName, String passWord) {
       Account account=new Account();
       //判断标识
        boolean flag=false;
        Set<Map.Entry<String, Account>> entries = map.entrySet();
        for (Map.Entry<String, Account> entry:entries) {
            Account value = entry.getValue();
            System.out.println(value);
    }
        if (userName.equals(account.getUserName())&&passWord.equals(account.getPassWord())){
            //返回合法
            return flag=true;
        }
        return false;
    }
}

----------------------------------------------------------------------------------------
4.服务层(Service)
package cn.axukt.empsys.lesson2.service;

import cn.axukt.empsys.lesson2.entity.Employee;

import java.util.List;

public interface EmployeeService {
    //查询所有员工信息
    public void queryEmployeeList();
    //添加员工信息
    public void addEmployee(Employee employee);
    //根据empId删除员工信息
    public void deleteEmployee(String empId);
    //根据empId修改员工信息
    public void modifyEmployee(Employee employee);
    //根据empID员工编号查询员工信息
    public void queryEmployee(String empId);
}

public interface AccountService {
    //验证用户是否合法
    public boolean verifyUser(String userName,String passWord);
}

实现类(impl)
package cn.axukt.empsys.lesson2.service.impl;

import cn.axukt.empsys.lesson2.dao.EmployeeDao;
import cn.axukt.empsys.lesson2.dao.impl.EmpDaoImp;
import cn.axukt.empsys.lesson2.service.EmployeeService;
import cn.axukt.empsys.lesson2.entity.Employee;
import java.util.List;

public class EmployeeServiceImp implements EmployeeService {
        //定义一个数据库访问对象EmployeeDao的实现类
        EmployeeDao employeeDao=new EmpDaoImp();

    @Override
    public void queryEmployeeList() {
        //获取所有员工的信息
        List<Employee> empList=employeeDao.queryEmployeeList();
        System.out.println("\t\t【编号】\t\t【姓名】\t\t【性别】\t\t【年龄】\t\t【籍贯】\t【薪资】");
        //按照指定格式进行遍历
        for (Employee e:empList) {
            System.out.println("\t\t"+e.getEmpId()+"\t"+e.getEmpName()+"\t\t"+e.getGender()+"\t\t"+e.getAge()+"\t\t"+e.getHomeTown()+"\t"+e.getSalary()+"\n");
        }
    }

    @Override
    public void addEmployee(Employee employee) {
        employeeDao.addEmployee(employee);
    }
//根据empId删除对应的员工信息
    @Override
    public void deleteEmployee(String empId) {
        employeeDao.deleteEmployee(empId);
    }
        //根据empId修改对应的员工信息
    @Override
    public void modifyEmployee(Employee employee) {
        employeeDao.modifyEmployeeInfo(employee);
    }

    //根据输入的empId查询相应的员工信息
    @Override
    public void queryEmployee(String empId) {
        //根据empId获取相应的员工信息
        Employee employee = employeeDao.queryEmployeeInfo(empId);
        System.out.println("\t\t【编号】\t\t\t【姓名】\t\t【性别】\t【年龄】\t\t【籍贯】\t\t【薪资】");
        System.out.println("\t\t"+employee.getEmpId()+"\t"+employee.getEmpName()+"\t\t"+employee.getGender()+"\t\t"+employee.getAge()+"\t\t"+employee.getHomeTown()+"\t"+employee.getSalary()+"\n");
    }

}

package cn.axukt.empsys.lesson2.service.impl;

import cn.axukt.empsys.lesson2.dao.AccountDao;
import cn.axukt.empsys.lesson2.dao.impl.AccountDaoImp;
import cn.axukt.empsys.lesson2.service.AccountService;

public class AccountServiceImp implements AccountService {
//定义一个数据库访问对象AccountDaoImp
    AccountDao accountDao=new AccountDaoImp();
    @Override
    public boolean verifyUser(String userName, String passWord) {
        return accountDao.verifyUser(userName,passWord);
    }
}

----------------------------------------------------------------------------------------
5.控制层(Controller)

package cn.axukt.empsys.lesson2.controller;

import cn.axukt.empsys.lesson2.entity.Employee;
import cn.axukt.empsys.lesson2.service.AccountService;
import cn.axukt.empsys.lesson2.service.EmployeeService;
import cn.axukt.empsys.lesson2.service.impl.AccountServiceImp;
import cn.axukt.empsys.lesson2.service.impl.EmployeeServiceImp;

import java.util.ConcurrentModificationException;
import java.util.Scanner;

public class Console {
    //创建一个Employee业务类的实现类
    EmployeeService employeeService=new EmployeeServiceImp();
    public void setMainMenu(){
        System.out.println("\t\t操作码\t操作名称");
        System.out.println("\t\t1------添加员工");
        System.out.println("\t\t2------删除员工");
        System.out.println("\t\t3------修改员工");
        System.out.println("\t\t4------查询员工");
        System.out.println("\t\t5------退出系统");
    }
    //启动程序
    public void run() {
        Scanner sc = new Scanner(System.in);
        //登录验证
        //创建一个Account的业务类的实现类
        AccountService accountService = new AccountServiceImp();
        System.out.println("请输入账户名称:");
        String userName = sc.next();
        System.out.println("请输入密码:");
        String passWord = sc.next();
        if (accountService.verifyUser(userName, passWord))
            System.out.println("此用户合法");
        //显示系统主菜单
        System.out.println("************************欢迎登录员工信息管理系统**********************************");
        setMainMenu();
        System.out.println("请输入操作码:【提示:必须是数字,如:1】---4");
        employeeService.queryEmployeeList();
        //定义一个操作码
        String opCode = sc.next();
        //判断输入的这个操作码对应的是什么操作
        while (!"5".equals(opCode)) {
            if ("1".equals(opCode)) {
                System.out.println("编号:");
                String empId = sc.next();
                System.out.println("姓名:");
                String empName = sc.next();
                System.out.println("性别:");
                String empGender = sc.next();
                System.out.println("年龄:");
                int empAge = sc.nextInt();
                System.out.println("籍贯:");
                String homeTown = sc.next();
                System.out.println("薪资:");
                double salary = sc.nextDouble();
                //封装成对象
                Employee employee = new Employee(empId, empName, empGender, empAge, homeTown, salary);
                //调用添加员工的业务类的实现类
                employeeService.addEmployee(employee);
                System.out.println("\t\t操作码\t操作名称");
                System.out.println("\t\t1------继续添加");
                System.out.println("\t\t2------返回上级菜单");
                System.out.print("请输入操作码:【提示:必须是数字,如:1】---");
                opCode = sc.next();
                if ("1".equals(opCode)) {
                    continue;
                }else if ("2".equals(opCode)){
                    setMainMenu();
                    System.out.print("请输入操作码:【提示:必须是数字,如:1】---");
                    opCode=sc.next();
                }
            }
            if ("2".equals(opCode)) {
                System.out.println("请输入要删除的员工对应的员工编号:");
                String empIdOne = sc.next();
                System.out.println("你是否确认要删除(y/n):");
                String keyboardConfirmOne = sc.next();
                if ("y".equalsIgnoreCase(keyboardConfirmOne)) {
                    //调用删除员工的业务类的实现类
                    try {
                        employeeService.deleteEmployee(empIdOne);
                        System.out.println("删除成功!!!员工列表如下:");
                        employeeService.queryEmployeeList();
                    } catch (ConcurrentModificationException e) {
                        e.getStackTrace();
                    } finally {
                        employeeService.deleteEmployee(empIdOne);
                        System.out.println("删除成功!!!员工列表如下:");
                        employeeService.queryEmployeeList();
                    }
                    System.out.println("\t\t操作码\t操作名称");
                    System.out.println("\t\t1-------继续删除");
                    System.out.println("\t\t2-------返回上级菜单");
                    System.out.print("请输入操作码:【提示:必须是数字,如:1】---");
                    opCode = sc.next();
                    if ("1".equals(opCode)) {
                        continue;
                    } else if ("2".equals(opCode)) {
                        setMainMenu();
                        System.out.print("请输入操作码:【提示:必须是数字,如:1】---");
                        opCode=sc.next();
                    }
                } else if ("n".equalsIgnoreCase(keyboardConfirmOne)) {
                    setMainMenu();
                    System.out.println("请输入操作码:【提示:必须是数字,如:1】---");
                    opCode=sc.next();
                }
            }
            if ("3".equals(opCode)) {
                System.out.println("请输入你要修改的员工对应的员工编号:");
                String empIdTwo = sc.next();
                System.out.println("员工姓名:");
                String empNameTwo = sc.next();
                System.out.println("员工性别:");
                String empGenderTwo = sc.next();
                System.out.println("员工年龄:");
                int empAgeTwo = sc.nextInt();
                System.out.println("员工籍贯:");
                String homeTownTwo = sc.next();
                System.out.println("员工薪资:");
                double salaryTwo = sc.nextDouble();
                //调用修改员工的业务类的实现类
                employeeService.modifyEmployee(new Employee(empIdTwo, empNameTwo, empGenderTwo, empAgeTwo, homeTownTwo, salaryTwo));
                employeeService.queryEmployeeList();
                setMainMenu();
                System.out.print("请输入操作码:【提示:必须是数字,如:1】---");
                opCode=sc.next();
            }
            if ("4".equals(opCode)) {
                System.out.println("请输入你要查询的员工对应的员工编码:");
                String empIdThree = sc.next();
                //调用查询员工的业务类的实现类
                employeeService.queryEmployee(empIdThree);
                setMainMenu();
                System.out.print("请输入操作码:【提示:必须是数字,如:1】---");
                opCode=sc.next();
            }
        }
        System.out.println("你已成功退出程序!!!");
        }

public static void main(String[] args) {
        Console console=new Console();
        console.setMainMenu();
        console.run();
        }
        }

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大部分Java应用都是Web应用,展现层是Web应用不可忽略的重要环节。Spring为展现层提供了一个优秀的Web框架——Spring MVC。和众多其它Web框架一样,它基于MVC设计理念,此外,由于它采用了松散耦合可插拔组件结构,具有比其它MVC框架更多的扩展性和灵活性。 Spring MVC框架围绕DispatcherServlet这个核心展开,DispatcherServlet的作用是截获请求并组织一系列组件共同完成请求的处理工作。 JavaServer Faces (JSF) 是一种用于构建 Web 应用程序的新标准 Java 框架。它提供了一种以组件为中心来开发 Java Web 用户界面的方法,从而简化了开发。JavaServer Faces 还引起了广大 Java/Web 开发人员的兴趣。“企业开发人员”和 Web 设计人员将发现 JSF 开发可以简单到只需将用户界面 (UI) 组件拖放到页面上,而“系统开发人员”将发现丰富而强健的 JSF API 为他们提供了无与伦比的功能和编程灵活性。JSF 还通过将良好构建的模型-视图-控制器 (MVC) 设计模式集成到它的体系结构中,确保了应用程序具有更高的可维护性。最后,由于 JSF 是通过 Java Community Process (JCP) 开发的一种 Java 标准,因此开发工具供应商完全能够为 JavaServer Faces 提供易于使用的、高效的可视化开发环境。 ① 整个过程开始于客户端发送一个HTTP请求; ② DispatcherServlet接收这个请求后,并将请求的处理工作委托给具体的处理器(Handler),后者负责处理请求执行相应的业务逻辑。在这之前,DispatcherServlet必须能够凭借请求信息(URL或请求参数等)按照某种机制找到请求对应的处理器,DispatcherServlet是通过垂询HandlerMapping完成这一工作的; ③ 当DispatcherServlet从HandlerMapping中得到当前请求对应的处理器后,它就将请求分派给这个处理器。处理器根据请求的信息执行相应的业务逻辑,一个设计良好的处理器应该通过调用Service层的业务对象完成业务处理,而非自己越俎代庖。 Spring提供了丰富的处理器类型,在真正处理业务逻辑前,有些处理器会事先执行两项预处理工作: 1)将HttpServletRequest请求参数绑定到一个POJO对象中; 2)对绑定了请求参数的POJO对象进行数据合法性校验; ④ 处理器完成业务逻辑的处理后将返回一个ModelAndView给DispatcherServlet,ModelAndView包含了视图逻辑名和渲染视图时需要用到的模型数据对象; ⑤ 由于ModelAndView中包含的是视图逻辑名,DispatcherServlet必须知道这个逻辑名对应的真实视图对象,这项视图解析的工作通过调用ViewResolver来完成; ⑥ 当得到真实的视图对象后,DispatcherServlet将请求分派给这个View对象,由其完成Model数据的渲染工作; ⑦ 最终客户端得到返回的响应,这可能是一个普通的HTML页面,也可能是一个Excel电子表格、甚至是一个PDF文档等不一而足的视图形式,Spring的视图类型是异常丰富和灵活的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值