毕业设计——基于SpringBoot+Mybatis+Thymeleaf架构实现的员工管理系统(源码+数据库)

这篇具有很好参考价值的文章主要介绍了毕业设计——基于SpringBoot+Mybatis+Thymeleaf架构实现的员工管理系统(源码+数据库)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

完整项目地址:https://download.csdn.net/download/lijunhcn/88430276

基于SpringBoot+Mybatis+Thymeleaf架构实现的员工管理系统(源码+数据库)

SpringBoot整合CRUD实现员工管理案例,将Mybatis整合到原项目中,加入了数据库,添加了日期选项的控件。

环境要求
  • JDK8以上
  • IDEA
  • MySQL8
  • Maven3
  • 需要熟练掌握MySQL数据库,SpringBoot及MyBatis知识,简单的前端知识;
数据库环境

创建案例所使用的数据库

CREATE DATABASE `employee`;

USE `employee`;

创建登陆用户数据表

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(10) NOT NULL,
  `user_name` varchar(255)  NOT NULL COMMENT '用户名',
  `password` varchar(255)  NOT NULL COMMENT '密码',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;

INSERT INTO `user` VALUES (1, 'admin', '123456');

创建部门信息的数据库表

DROP TABLE IF EXISTS `department`;
CREATE TABLE `department` (
  `id` int(10) NOT NULL,
  `department_name` varchar(255)  NOT NULL COMMENT '部门名称',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

BEGIN;
INSERT INTO `department` VALUES (1, '市场部');
INSERT INTO `department` VALUES (2, '技术部');
INSERT INTO `department` VALUES (3, '销售部');
INSERT INTO `department` VALUES (4, '客服部');
INSERT INTO `department` VALUES (5, '公关部');
COMMIT;

创建存放员工信息的数据库表

DROP TABLE IF EXISTS `employee`;
CREATE TABLE `employee` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `employee_name` varchar(255)  NOT NULL COMMENT '员工姓名',
  `email` varchar(255)  NOT NULL COMMENT '员工邮箱',
  `gender` int(2) NOT NULL COMMENT '员工性别',
  `department_id` int(10) NOT NULL COMMENT '部门编号',
  `date` date NOT NULL COMMENT '入职日期',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;

BEGIN;
INSERT INTO `employee` VALUES (1, '张三', 'zhangsan@gmail.com', 0, 1, '2020-05-12');
INSERT INTO `employee` VALUES (2, '李四', 'lisi@qq.com', 1, 2, '2020-05-05');
INSERT INTO `employee` VALUES (3, '王五', 'wangwu@126.com', 0, 3, '2020-05-15');
INSERT INTO `employee` VALUES (4, '赵六', 'zhaoliu@163.com', 1, 4, '2020-04-21');
INSERT INTO `employee` VALUES (5, '田七', 'tianqi@foxmail.com', 0, 3, '2020-05-14');
INSERT INTO `employee` VALUES (10, '王伟', 'wangwei@gmail.com', 1, 3, '2020-05-08');
INSERT INTO `employee` VALUES (11, '张伟', 'zhangwei@gmail.com', 1, 2, '2020-05-11');
INSERT INTO `employee` VALUES (12, '李伟', 'liwei@gmail.com', 1, 3, '2020-05-18');
COMMIT;
基本环境搭建
  1. 新建Spring项目, 添加Lombok,Spring Web,Thymeleaf,Mybatis,MySQL Driver的支持

  2. 相关的pom依赖

    org.springframework.boot spring-boot-starter-thymeleaf org.springframework.boot spring-boot-starter-web org.mybatis.spring.boot mybatis-spring-boot-starter 2.1.2 mysql mysql-connector-java runtime org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test org.junit.vintage junit-vintage-engine
  3. 建立基本结构和配置框架

com/
|-- godfrey |-- config |-- controller |-- dto |-- mapper |-- pojo |-- service

  1. application.yml里配置数据库连接信息及Mapper映射文件信息

    spring:
    datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/employee?useSSL=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
    username: employee
    password: employee123
    thymeleaf:
    cache: false
    messages:
    basename: i18n.login

    mybatis:
    type-aliases-package: com.godfrey.pojo
    mapper-locations: classpath:com.godfrey.mapper/*Mapper.xml
    configuration:
    map-underscore-to-camel-case: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

  2. 测试数据库连接

    package com.godfrey;

    import org.junit.jupiter.api.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;

    import javax.sql.DataSource;
    import java.sql.Connection;
    import java.sql.SQLException;

    @SpringBootTest
    class ApplicationTests {

    @Autowired
    DataSource dataSource;
    
    @Test
    void contextLoads() throws SQLException {
        System.out.println("数据源>>>>>>" + dataSource.getClass());
        Connection connection = dataSource.getConnection();
        System.out.println("连接>>>>>>>>>" + connection);
        System.out.println("连接地址>>>>>" + connection.getMetaData().getURL());
        connection.close();
    }
    

    }

查看输出结果,数据库配置ok

创建pojo实体类
  1. 创建User实体

    package com.godfrey.pojo;

    import lombok.Data;

    /**

    • description : 登录验证实体类
    • @author godfrey
    • @since 2020-05-26
      */
      @Data
      public class User {
      private Integer id;
      private String userName;
      private String password;
      }
  2. 创建Department实体

    package com.godfrey.pojo;

    import lombok.Data;

    /**

    • description : 部门实体类
    • @author godfrey
    • @since 2020-05-26
      */
      @Data
      public class Department {
      private Integer id;
      private String departmentName;
      }
  3. 创建Employee实体

    package com.godfrey.pojo;

    import lombok.Data;

    import java.sql.Date;

    /**

    • description : 员工实体类
    • @author godfrey
    • @since 2020-05-26
      */
      @Data
      public class Employee {
      private Integer id;
      private String employeeName;
      private String email;
      private Integer gender; //0:女 1:男
      private Date date;
      private Integer departmentId;
      }
  4. 创建EmployeeDTO实体

    package com.godfrey.dto;

    import lombok.Data;

    import java.sql.Date;

    /**

    • description : EmployeeDTO
    • @author godfrey
    • @since 2020-05-26
      */
      @Data
      public class EmployeeDTO {
      private Integer id;
      private String employeeName;
      private String email;
      private Integer gender;
      private String departmentName;
      private Date date;
      }
Mapper层

文件存放目录:

com.godfrey.mapper 相关接口

resources/com.godfrey.mapper 相关mapper.xml

  1. 编写User的Mapper接口:UserMapper

    package com.godfrey.mapper;

    import com.godfrey.pojo.User;
    import org.apache.ibatis.annotations.Mapper;
    import org.apache.ibatis.annotations.Param;
    import org.springframework.stereotype.Repository;

    /**

    • description : 登录验证查询Mapper
    • @author godfrey
    • @since 2020-05-26
      */
      @Mapper
      @Repository
      public interface UserMapper {
      User selectPasswordByName(@Param(“userName”) String userName, @Param(“password”) String password);
      }
  2. 编写接口对应的Mapper.xml文件:UserMapper.xml

    <?xml version="1.0" encoding="UTF-8" ?> select * from employee.user where user_name = #{userName} and password = #{password};
  3. 编写Department的Mapper接口:DepaertmentMapper

    package com.godfrey.mapper;

    import com.godfrey.pojo.Department;
    import org.apache.ibatis.annotations.Mapper;
    import org.springframework.stereotype.Repository;

    import java.util.List;

    /**

    • description : 部门Mapper

    • @author godfrey

    • @since 2020-05-26
      */
      @Mapper
      @Repository
      public interface DepartmentMapper {

      List selectAllDepartment();
      }

  4. 编写接口对应的Mapper.xml文件:DepaertmentMapper.xml

    <?xml version="1.0" encoding="UTF-8" ?> select * from department;
  5. 编写Employee的Mapper接口:EmployeeMapper

    package com.godfrey.mapper;

    import com.godfrey.dto.EmployeeDTO;
    import com.godfrey.pojo.Employee;
    import org.apache.ibatis.annotations.Mapper;
    import org.apache.ibatis.annotations.Param;
    import org.springframework.stereotype.Repository;

    import java.util.List;

    /**

    • description : 员工Mapper

    • @author godfrey

    • @since 2020-05-26
      */
      @Mapper
      @Repository
      public interface EmployeeMapper {
      //查询全部员工信息
      List selectAllEmployeeDTO();

      //根据id查询员工信息
      Employee selectEmployeeById(@Param(“id”) Integer id);

      //添加一个员工信息
      int addEmployee(Employee employee);

      //修改一个员工信息
      int updateEmployee(Employee employee);

      //根据id删除员工信息
      int deleteEmployee(@Param(“id”) Integer id);
      }

  6. 编写接口对应的Mapper.xml文件:EmployeeMapper.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <resultMap id="EmployeeDTO" type="com.godfrey.dto.EmployeeDTO">
        <id column="id" jdbcType="INTEGER" property="id"/>
        <result column="employee_name" jdbcType="VARCHAR" property="employeeName"/>
        <result column="email" jdbcType="VARCHAR" property="email"/>
        <result column="gender" jdbcType="INTEGER" property="gender"/>
        <result column="department_name" jdbcType="VARCHAR" property="departmentName"/>
        <result column="date" jdbcType="DATE" property="date"/>
    </resultMap>
    
    <select id="selectAllEmployeeDTO" resultMap="EmployeeDTO">
        select e.id, e.employee_name, e.email, e.gender, d.department_name, e.date
        from employee e,
             department d
        where e.department_id = d.id;
    </select>
    
    <select id="selectEmployeeById" resultType="Employee">
        select *
        from employee
        where id = #{id}
    </select>
    
    <insert id="addEmployee" parameterType="Employee">
        insert into employee (id, employee_name, email, gender, department_id, date)
        values (#{id}, #{employeeName}, #{email}, #{gender}, #{departmentId}, #{date})
    </insert>
    
    <update id="updateEmployee" parameterType="Employee">
        update employee
        set employee_name=#{employeeName},
            email=#{email},
            gender=#{gender},
            department_id=#{departmentId},
            date=#{date}
        where id = #{id}
    </update>
    
    <delete id="deleteEmployee" parameterType="int">
        delete
        from employee
        where id = #{id}
    </delete>
    
Service层

com.wangqiang.service

  1. EmployeeService接口:

    package com.godfrey.service;

    import com.godfrey.dto.EmployeeDTO;
    import com.godfrey.pojo.Employee;

    import java.util.List;

    /**

    • description : 员工业务层接口
    • @author godfrey
    • @since 2020-05-26
      */
      public interface EmployeeService {
      //查询全部员工信息
      List selectAllEmployeeDTO();
      //根据id查询员工信息
      Employee selectEmployeeById(int id);
      //添加一个员工信息
      int addEmployee(Employee employee);
      //修改一个员工信息
      int updateEmployee(Employee employee);
      //根据id删除员工信息
      int deleteEmployee(int id);
      }
  2. EmployeeServiceImpl实现类:

    package com.godfrey.service.impl;

    import com.godfrey.dto.EmployeeDTO;
    import com.godfrey.mapper.EmployeeMapper;
    import com.godfrey.pojo.Employee;
    import com.godfrey.service.EmployeeService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;

    import java.util.List;

    /**

    • description : 员工业务层实现类

    • @author godfrey

    • @since 2020-05-26
      */
      @Service
      public class EmployeeServiceImpl implements EmployeeService {
      @Autowired
      private EmployeeMapper employeeMapper;

      @Override
      public List selectAllEmployeeDTO() {
      return employeeMapper.selectAllEmployeeDTO();
      }

      @Override
      public Employee selectEmployeeById(int id) {
      return employeeMapper.selectEmployeeById(id);
      }

      @Override
      public int addEmployee(Employee employee) {
      return employeeMapper.addEmployee(employee);
      }

      @Override
      public int updateEmployee(Employee employee) {
      return employeeMapper.updateEmployee(employee);
      }

      @Override
      public int deleteEmployee(int id) {
      return employeeMapper.deleteEmployee(id);
      }
      }

  3. DepartmentService接口

    package com.godfrey.service;

    import com.godfrey.pojo.Department;

    import java.util.List;

    /**

    • description : DepartmentService
    • @author godfrey
    • @since 2020-05-27
      */
      public interface DepartmentService {
      List selectAllDepartment();
      }
  4. DepartmentImpl实现类:

    package com.godfrey.service.impl;

    /**

    • description : DepartmentServiceImpl
    • @author godfrey
    • @since 2020-05-27
      */

    import com.godfrey.mapper.DepartmentMapper;
    import com.godfrey.pojo.Department;
    import com.godfrey.service.DepartmentService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;

    import java.util.List;

    @Service
    public class DepartmentServiceImpl implements DepartmentService {

    @Autowired
    private DepartmentMapper departmentMapper;
    
    @Override
    public List<Department> selectAllDepartment() {
        return departmentMapper.selectAllDepartment();
    }
    

    }

  5. UserService接口

    package com.godfrey.service;

    import com.godfrey.pojo.User;

    /**

    • description : User业务层
    • @author godfrey
    • @since 2020-05-26
      */
      public interface UserService {
      User selectPasswordByName(String userName, String password);
      }
  6. UserServiceImpl实现类

    package com.godfrey.service.impl;

    import com.godfrey.mapper.UserMapper;
    import com.godfrey.pojo.User;
    import com.godfrey.service.UserService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;

    /**

    • description : UserServiceImpl

    • @author godfrey

    • @since 2020-05-26
      */
      @Service
      public class UserServiceImpl implements UserService {
      @Autowired
      private UserMapper userMapper;

      @Override
      public User selectPasswordByName(String userName, String password) {
      return userMapper.selectPasswordByName(userName, password);
      }
      }

  7. 测试获取数据情况

    @Autowired
    EmployeeService employeeService;

    @Test
    public void test(){
    List employees = employeeService.selectAllEmployeeDTO();
    for (EmployeeDTO employee : employees) {
    System.out.println(employee);
    }
    }
    @Test
    public void test2(){
    Employee employee = employeeService.selectEmployeeById(1);
    System.out.println(employee);
    //Employee(id=1, employeeName=张三, email=zhangsan@gmail.com, gender=0, departmentId=1, date=2020-02-12)
    }

    @Test
    public void test3(){
    Employee employee = new Employee();
    employee.setId(6);
    employee.setEmployeeName(“test”);
    employee.setEmail(“123@qq.com”);
    employee.setDepartmentId(2);
    Date date = new Date(2020-02-02);
    employee.setDate(date);
    employeeService.addEmployee(employee);
    Employee employee1 = employeeService.selectEmployeeById(6);
    System.out.println(employee1);
    //Employee(id=6, employeeName=test, email=123@qq.com, gender=0, departmentId=2, date=1970-01-01)
    }

    @Test
    public void test4(){
    Employee employee = new Employee();
    employee.setId(6);
    employee.setEmployeeName(“test”);
    employee.setEmail(“123@qq.com”);
    employee.setDepartmentId(3);
    Date date = new Date(2020-02-02);
    employee.setDate(date);
    employeeService.updateEmployee(employee);
    Employee employee1 = employeeService.selectEmployeeById(6);
    System.out.println(employee1);
    //Employee(id=6, employeeName=test, email=123@qq.com, gender=0, departmentId=3, date=1970-01-01)
    }

    @Test
    public void test05(){
    employeeService.deleteEmployee(6);
    }

    @Autowired
    private UserService userService;
    @Test
    public void test06(){
    User admin = userService.selectPasswordByName(“admin”,“123456”);
    System.out.println(admin);
    //User(id=1, name=admin, password=123456)
    }

    @Autowired
    private DepartmentService departmentService;
    @Test
    public void test07(){
    List departments = departmentService.selectAllDepartment();
    for (Department department : departments) {
    System.out.println(department);
    }
    }

Controller层
  1. 登陆页LoginController

    package com.godfrey.controller;

    import com.godfrey.pojo.User;
    import com.godfrey.service.UserService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;

    import javax.servlet.http.HttpSession;

    /**

    • description : 登录Controller

    • @author godfrey

    • @since 2020-05-26
      */
      @Controller
      public class LoginController {

      @Autowired
      private UserService userService;

      @RequestMapping(“/login”)
      public String login(@RequestParam(“username”)String username,
      @RequestParam(“password”)String password,
      HttpSession session,
      Model model){
      User user = userService.selectPasswordByName(username, password);
      if ( user != null){
      //登录成功!
      session.setAttribute(“username”,user.getUserName());
      //登录成功!防止表单重复提交,我们重定向
      return “redirect:/main.html”;
      }else {
      //登录失败!存放错误信息
      model.addAttribute(“msg”,“用户名或密码错误”);
      return “index”;
      }
      }

      @GetMapping(“/user/loginOut”)
      public String loginOut(HttpSession session){
      session.invalidate();
      return “redirect:/index.html”;
      }
      }

  2. 员工信息Controller

    package com.godfrey.controller;

    import com.godfrey.dto.EmployeeDTO;
    import com.godfrey.pojo.Department;
    import com.godfrey.pojo.Employee;
    import com.godfrey.service.DepartmentService;
    import com.godfrey.service.EmployeeService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.PostMapping;

    import java.util.Collection;

    /**

    • description : EmployeeController

    • @author godfrey

    • @since 2020-05-26
      */
      @Controller
      public class EmployeeController {

      @Autowired
      private EmployeeService employeeService;

      @Autowired
      private DepartmentService departmentService;

      //查询所有员工,返回列表页面
      @GetMapping(“/emp”)
      public String list(Model model){
      Collection employees = employeeService.selectAllEmployeeDTO();
      // 将结果放在请求中
      model.addAttribute(“emps”,employees);
      return “emp/list.html”;
      }

      //to员工添加页面
      @GetMapping(“/add”)
      public String toAdd(Model model){
      //查出所有的部门,提供选择
      Collection departments = departmentService.selectAllDepartment();
      model.addAttribute(“departments”,departments);
      return “emp/add.html”;
      }

      //员工添加功能,使用post接收
      @PostMapping(“/add”)
      public String add(Employee employee){
      //保存员工信息
      employeeService.addEmployee(employee);
      //回到员工列表页面,可以使用redirect或者forward
      return “redirect:/emp”;
      }

      //to员工修改页面
      @GetMapping(“/emp/{id}”)
      public String toUpdateEmp(@PathVariable(“id”) Integer id, Model model){
      //根据id查出来员工
      Employee employee = employeeService.selectEmployeeById(id);
      //将员工信息返回页面
      model.addAttribute(“emp”,employee);
      //查出所有的部门,提供修改选择
      Collection departments = departmentService.selectAllDepartment();
      model.addAttribute(“departments”,departments);

       return "emp/update.html";
      

      }

      @PostMapping(“/updateEmp”)
      public String updateEmp(Employee employee){
      employeeService.updateEmployee(employee);
      //回到员工列表页面
      return “redirect:/emp”;
      }

      @GetMapping(“/delEmp/{id}”)
      public String deleteEmp(@PathVariable(“id”)Integer id){
      //根据id删除员工
      employeeService.deleteEmployee(id);
      return “redirect:/emp”;
      }
      }

完善Config文件
  1. 编写Interceptor拦截器配置

    package com.godfrey.config;

    import org.springframework.web.servlet.HandlerInterceptor;

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    /**

    • description : Interceptor登录拦截器
    • @author godfrey
    • @since 2020-05-26
      */
      public class MyHandlerInterceptor implements HandlerInterceptor {
      @Override
      public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
      Object username = request.getSession().getAttribute(“username”);
      if (username == null) {//未登录,返回登录页面
      request.setAttribute(“msg”, “没有权限,请先登录”);
      request.getRequestDispatcher(“/index.html”).forward(request, response);
      return false;
      } else {//登录,放行
      return true;
      }
      }
      }
  2. 编写国际化配置文件

    package com.godfrey.config;

    import org.springframework.util.StringUtils;
    import org.springframework.web.servlet.LocaleResolver;

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.util.Locale;

    /**

    • description : 国际化语言解析器

    • @author godfrey

    • @since 2020-05-26
      */
      public class MyLocaleResolver implements LocaleResolver {
      //解析请求
      @Override
      public Locale resolveLocale(HttpServletRequest httpServletRequest) {
      //获取请求中的语言参数
      String language = httpServletRequest.getParameter(“lang”);
      Locale locale = Locale.getDefault();//如果没有就使用默认的
      if(!StringUtils.isEmpty(language)){
      String[] split = language.split(“_”);
      locale = new Locale(split[0],split[1]);
      }
      return locale;
      }

      @Override
      public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) {

      }
      }

  3. 编写WebMvc文件,将上述配置到MvcConfiguration中

    package com.godfrey.config;

    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.LocaleResolver;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

    /**

    • description : 扩展MVC配置

    • @author godfrey

    • @since 2020-05-26
      */
      @Configuration
      public class MyWebMvcConfig implements WebMvcConfigurer {
      @Override
      public void addViewControllers(ViewControllerRegistry registry) {
      registry.addViewController(“/”).setViewName(“index”);
      registry.addViewController(“/index.html”).setViewName(“index”);
      registry.addViewController(“/main.html”).setViewName(“main”);
      }

      //自定义国际化组件
      @Bean
      public LocaleResolver localeResolver(){
      return new MyLocaleResolver();
      }

      @Override
      public void addInterceptors(InterceptorRegistry registry) {
      registry.addInterceptor(new MyHandlerInterceptor())
      .addPathPatterns(“/“)
      .excludePathPatterns(”/“,”/index.html",“/login”,"/css/
      ”,“/js/“,”/img/”);
      }
      }

前端视图
  1. 登陆页index.html

    Signin Template for Bootstrap
    <h1 class="h3 mb-3 font-weight-normal" th:text="#{login.tip}">Please sign in</h1>
    <input type="text" name="username" class="form-control" th:placeholder="#{login.username}" required="" autofocus="">
    <input type="password" name="password" class="form-control" th:placeholder="#{login.password}" required="">
    <!--判断是否显示,使用if, ${}可以使用工具类,可以看thymeleaf的中文文档-->
    <p style="color: red" th:text="${msg}" th:if="${not #strings.isEmpty(msg)}"></p>
    <div class="checkbox mb-3">
    	<label>
    		<input type="checkbox" value="remember-me" > [[#{login.remember}]]
    	</label>
    </div>
    <button class="btn btn-lg btn-primary btn-block" type="submit">[[#{login.btn}]]</button>
    <p class="mt-5 mb-3 text-muted">© 2017-2018</p>
    <a class="btn btn-sm" th:href="@{/index.html(lang=zh_CN)}">中文</a>
    <a class="btn btn-sm" th:href="@{/index.html(lang=en_US)}">English</a>
    
  2. 系统管理页 main.html文章来源地址https://www.toymoban.com/news/detail-773695.html

    <title>Dashboard Template for Bootstrap</title>
    <!-- Bootstrap core CSS -->
    <link th:href="@{/css/bootstrap.min.css}" rel="stylesheet">
    
    <!-- Custom styles for this template -->
    <link th:href="@{/css/dashboard.css}" rel="stylesheet">
    <style type="text/css">
    	/* Chart.js */
    
    	@-webkit-keyframes chartjs-render-animation {
    		from {
    			opacity: 0.99
    		}
    		to {
    			opacity: 1
    		}
    	}
    
    	@keyframes chartjs-render-animation {
    		from {
    			opacity: 0.99
    		}
    		to {
    			opacity: 1
    		}
    	}
    
    	.chartjs-render-monitor {
    		-webkit-animation: chartjs-render-animation 0.001s;
    		animation: chartjs-render-animation 0.001s;
    	}
    </style>
    
    	<main role="main" class="col-md-9 ml-sm-auto col-lg-10 pt-3 px-4">
    		<div class="chartjs-size-monitor" style="position: absolute; left: 0px; top: 0px; right: 0px; bottom: 0px; overflow: hidden; pointer-events: none; visibility: hidden; z-index: -1;">
    			<div class="chartjs-size-monitor-expand" style="position:absolute;left:0;top:0;right:0;bottom:0;overflow:hidden;pointer-events:none;visibility:hidden;z-index:-1;">
    				<div style="position:absolute;width:1000000px;height:1000000px;left:0;top:0"></div>
    			</div>
    			<div class="chartjs-size-monitor-shrink" style="position:absolute;left:0;top:0;right:0;bottom:0;overflow:hidden;pointer-events:none;visibility:hidden;z-index:-1;">
    				<div style="position:absolute;width:200%;height:200%;left:0; top:0"></div>
    			</div>
    		</div>
    		<div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pb-2 mb-3 border-bottom">
    			<h1 class="h2">Dashboard</h1>
    			<div class="btn-toolbar mb-2 mb-md-0">
    				<div class="btn-group mr-2">
    					<button class="btn btn-sm btn-outline-secondary">Share</button>
    					<button class="btn btn-sm btn-outline-secondary">Export</button>
    				</div>
    				<button class="btn btn-sm btn-outline-secondary dropdown-toggle">
    					<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-calendar"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg>
    					This week
    				</button>
    			</div>
    		</div>
    		<canvas class="my-4 chartjs-render-monitor" id="myChart" width="1076" height="454" style="display: block; width: 1076px; height: 454px;"></canvas>
    	</main>
    </div>
    

到了这里,关于毕业设计——基于SpringBoot+Mybatis+Thymeleaf架构实现的员工管理系统(源码+数据库)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 毕业设计——基于springboot的在线聊天系统设计与实现

    完整项目地址:https://download.csdn.net/download/lijunhcn/88430400 本项目是一套聊天系统,包括前台手机界面及后台分布式系统,基于SpringBoot+Netty+MUI+H5Plus+Nginx+FastDFS分布式文件系统搭建的聊天系统。 前端聊天系统包含首页门户登录注册、互信、通讯录、发现、我等模块,添加了扫一

    2024年02月03日
    浏览(46)
  • 基于SpringBoot的图书管理系统毕业设计

    图书管理系统 摘要 大数据时代下,数据呈爆炸式地增长。为了迎合信息化时代的潮流和信息化安全的要求,利用互联网服务于其他行业,促进生产,已经是成为一种势不可挡的趋势。在图书馆管理的要求下,开发一款整体式结构的图书管理系统,将复杂的系统进行拆分,能

    2024年02月03日
    浏览(45)
  • 基于SpringBoot的快餐订餐平台设计与实现 毕业设计开题报告

     博主介绍 :《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、PPT、论文模版

    2024年02月05日
    浏览(44)
  • 基于Java(SpringBoot框架)毕业设计作品成品(28)AI毕业设计人脸识别考勤签到系统设计与实现

    博主介绍: 《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、PPT、论文模版

    2024年02月08日
    浏览(70)
  • 基于springboot旅游网站的设计与实现毕业设计-附源码211713

    摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对旅游等问题,对旅游网站进行研究分析,然后开发设计出旅游网站以解决问

    2024年02月02日
    浏览(54)
  • 基于Java(SpringBoot框架)毕业设计作品成品(29)AI毕业设计AI智能植物大全识别系统设计与实现

    博主介绍: 《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、PPT、论文模版

    2024年02月08日
    浏览(58)
  • 基于Java(SpringBoot框架)毕业设计作品成品(30)AI毕业设计AI智能动物大全识别系统设计与实现

    博主介绍: 《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、PPT、论文模版

    2024年02月08日
    浏览(55)
  • 基于Springboot网上购物系统 毕业设计-附源码311236

    随着Internet的使用越来越广泛,在传统的商业模式中,对于日常各类商品,人们习惯于到各种商家店铺购买。然而在快节奏的新时代中,人们不一定能为购买各类商品腾出时间,更不会耐心挑选自己想要的商品。所以设计一个网上购物系统,既是迎合电子商务的大潮流,也是

    2024年02月03日
    浏览(49)
  • 【毕业设计】基于springboot + vue微信小程序商城

    【毕业设计】基于springboot + vue微信小程序商城 这是一款基于SpringBoot+Vue的微信小程序文创平台和艺术类专业毕设收集平台,为用户提供文化创意产品的学习以及艺术类专业毕业生的成果展示和交流平台。文创平台实现了用户注册、登录、发布、浏览和真实购买等功能,同时又

    2024年02月09日
    浏览(45)
  • 基于springboot的校园疫情防控系统【毕业设计,源码,论文】

     想要源码或其他毕设项目,可以私信~  摘  要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代,校园疫情防

    2024年02月05日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包