SpringBoot简易员工管理系统
这里是一个简单的员工管理系统,实现了员工的增删改查,项目的完整讲解视频
请跳转至狂神老师的课程查看https://www.bilibili.com/video/av75233634?p=20
一、准备工作——pojo层
首先我们先编辑pojo实体类层,这里面包含部门和员工两个类.
package com.proj.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Department {
private Integer id;
private String name;
}
部门拥有部门ID,名字两个属性.
package com.proj.pojo;
import com.proj.pojo.Department;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@NoArgsConstructor
public class Employee {
private Integer id;
private String lastname;
private Integer gender;
private String email;
private Department department;
private Date date;
public Employee(Integer id, String lastname, Integer gender, String email, Department department) {
this.id = id;
this.lastname = lastname;
this.gender = gender;
this.email = email;
this.department = department;
this.date = new Date();
}
}
员工类中包含 id,名字,性别,邮件,部门,日期几个属性
其中的性别使用1代表男性,0代表女性。
这里我们使用lombok框架的@AllArgsConstructor,@NoArgsConstructor自动生成有参和无参的构造方法,在上面添加@Data注解自动生成getter setter toString的方法.员工的日期属性我们在调用有参构造时使用当前日期。
二、准备工作——Dao层
这里Dao层我们来写一些关于员工增删改查的逻辑方法.
这里我们还是有两个类,一个是DepartmentDao,另一个是EmployeeDao,分别处理部门和员工。
package com.proj.dao;
import com.proj.pojo.Department;
import org.springframework.stereotype.Repository;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
//@Repository
@Repository
public class DepartmentDao {
private static Map<Integer, Department> departmentMap = null;
static {
departmentMap = new HashMap<Integer, Department>();
departmentMap.put(101,new Department(101,"教学部"));
departmentMap.put(102,new Department(102,"市场部"));
departmentMap.put(103,new Department(103,"后勤部"));
departmentMap.put(104,new Department(104,"技术部"));
departmentMap.put(105,new Department(105,"小卖部"));
}
public Collection<Department> getDepartment(){
return departmentMap.values();
}
public Department getDepartmentById(Integer id){
return departmentMap.get(id);
}
}
这里使用@Repository注解标注其为Dao层,定义一个map注入部门的编号以及名称,getDepartment方法返回所有department的集合,getDepartmentById方法使用id(键)查询相应的部门。
package com.proj.dao;
import com.proj.pojo.Department;
import com.proj.pojo.Employee;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
@Repository
public class EmployeeDao {
private static Map<Integer, Employee> employeeMap = null;
@Autowired
private DepartmentDao departmentDao;
static {
employeeMap = new HashMap<Integer, Employee>();
employeeMap.put(1001,new Employee(1001,"AA",1,"aa@a.com",new Department(101,"教学部")));
employeeMap.put(1002,new Employee(1002,"BB",0,"ab@a.com",new Department(102,"市场部")));
employeeMap.put(1003,new Employee(1003,"CC",1,"ac@a.com",new Department(103,"后勤部")));
employeeMap.put(1004,new Employee(1004,"DD",0,"ad@a.com",new Department(104,"技术部")));
employeeMap.put(1005,new Employee(1005,"EE",1,"ae@a.com",new Department(105,"小卖部")));
}
private static Integer Init = 1006;//定义新的初始编号
public void AddEmployee(Employee employee){
if(employee.getId()==null){
employee.setId(Init++);
}
employee.setDepartment(departmentDao.getDepartmentById(employee.getDepartment().getId()));
}
public Collection<Employee> getAll(){
return employeeMap.values();
}
public Employee searchEmployees(Integer id){
return employeeMap.get(id);
}
public void Del(Integer id){
employeeMap.remove(id);
}
}
在employeeDao层我们一样也是通过map管理数据,定义并给map赋值,又定义了一个DepartmentDao对象,通过@Autowired注解进行自动装配赋值,把我们之前DepartmentDao类写的对象装配到其中。
之后分别写增删改查的方法,在增方法中,我们通过Init属性自增进行id进行赋值,部门的赋值通过employee传来的部门id对相关部门进行查找然后赋值.
三、首页的实现
这里我们使用网上现成的模板进行编写,模板的下载地址:https://www.lanzous.com/i9a364h.
我们先把下好的模板放到resource资源目录下的templates资源目录下,将css js等样式文件放到static目录下。
这里各位先不要管commons等目录,这是我们之后要用到的。
我们首先编写controller,首先创建一个indexController类
package com.proj.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class IndexController {
@RequestMapping({
"/","/index.html"})
public String string(){
return "index";
}
}
写一个requestMapping,如果我们得到用户的/或者/index请求页面就返回到index页面。我们这里index是一个登录页面.
这里我们还需要扩展一下我们MVC中的内容。
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("index");
registry.addViewController("/index").setViewName("index");
registry.addViewController("/main.html").setViewName("dashboard");
}
}
通过设置addViewController让/和/index自动跳转到index主页中,让main.html跳转到dashiboard页面。
并且我们要使用模板引擎进行资源的引入.在HTML标签中导入模板引擎xmlns:th=“http://www.thymeleaf.org”,将各个页面的href属性改为th:href="@{}"的格式.
<link th:href="@{/css/bootstrap.min.css}" rel="stylesheet">
这样我们的首页就可以实现啦!
四、国际化
在网站的编写中,我们经常要切换中英文,这样我们就要实现页面的国际化.
首先我们要统一编码。
在idea中统一设置为utf8编码。
之后我们在resource目录下同时创建login.properties,login_en_US.properties,login_zh_CN.properties,系统会自动识别我们的properties文件
我们把创建一个文件夹i18n,将其放到i18n中。
之后我们统一编写login.properties和login_zh_CN.properties文件的配置
login.btn=登录
login.password=密码
login.remember=记住我
login.tip=请登录
login.username=用户名
login_en_US.properties使用英语
login.btn=Sign in
login.password=Password
login.remember=Remember me
login.tip=Please sign in
login.username=Username
下面就是进行按钮点击逻辑的编写了。
在Spring中有一个国际化的Locale (区域信息对象);里面有一个叫做LocaleResolver (获取区域信息对象)的解析器,我们要定义一个自己的区域信息对象。3
首先我们先修改一下前端中英文切换按钮的链接
在后面定义一个在index后面添加一个l,用于我们的LocaleResolver 接收参数
<a class="btn btn-sm" th:href="@{/index.html(l='zh_CN')}">中文</a>
<a class="btn btn-sm" th:href="@{/index.html(l='en_US')}">English</a>
我们编写一个MyLocaleResolver类,他需要实现LocaleResolver接口
package com.proj.config;
import org.springframework.web.servlet.LocaleResolver;
import org.thymeleaf.util.StringUtils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Locale;
public class MyLocaleResolver implements LocaleResolver
{
@Override
public Locale resolveLocale(HttpServletRequest httpServletRequest) {
String language = httpServletRequest.getParameter("l");//获取到l
Locale locale = Locale.getDefault()