狂神说JAVA SpringBoot员工管理系统

SpringBoot员工管理系统(没有数据库)

成品:https://download.csdn.net/download/weixin_43501359/14927226

SpringBoot员工管理系统(整合Mybatis和Mysql)(后续)

成品(有数据库):https://download.csdn.net/download/weixin_43501359/14928697

文章目录

  • SpringBoot员工管理系统(没有数据库)
    • 1.静态资源
    • 2.配置首页
      • 1)命名空间
      • 2)用th:接管属性 @{URL}
      • 3)接管MvcConfig(创建一个类实现‘WebMvcConfigurer’接口)
      • 4)添加视图控制器
    • 3.登录页国际化
      • 1)配置.properties
      • 2)用th:接管属性 #{properties中的属性}
      • 3)设在超链接接受参数
      • 4)接管地区解释器(创建一个类实现'MyLocaleResolver'接口)
      • 5)重写方法
      • 6)到配置类中注册Bean
      • 7)配置类中配置
    • 4.登录拦截器
      • 1)创建一个类实现拦截器‘HandlerInterceptor’接口
      • 2)默认重写三个方法
      • 3)配置类中添加拦截器,设置拦截哪些请求,放行哪些请求。
    • 5.提取页面公共部分作为组件
    • 6.展示员工列表
      • 1)侧边栏高亮(页面传参)
        • a.用th:接管class属性,if三目运算
        • b.组件传参(k=v)
      • 2)伪造数据(准备工作)
      • 3)获取数据(创建一个‘Controller’类)
      • 4)修改list.html 展示数据(th:each遍历)
    • 7.增加员工
      • 1)添加员工按钮
      • 2)请求跳转页面
      • 3)添加(restful风格) (表单post)(departments特殊类型)
      • 4)返回员工页面
      • 5)日期格式设置
    • 8.修改员工信息
        • 1)编辑按钮跳转并携带信息(地址传参)
        • 2)信息显示 (update.html)
        • 3)修改
        • 4)提交返回员工列表
    • 9.删除员工信息
        • 1)删除按钮携带信息请求(地址传参)
        • 2)删除
        • 3)返回员工列表
    • 10.注销和404
        • 1)404
        • 2)注销(移除seesion中的对应属性)
    • 源码:
        • index.html
        • commons.html
        • add.html
        • update.html
        • 404.html
        • LoginHandlerInterceptor.java
        • MyLocaleResolver.java
        • MyMvcConfig.java
        • EmployeeController.java
        • LoginController.java
        • DepartmentDao.java
        • EmployeeDao.java
        • Department.java
        • Employee.java
        • login.properties
        • application.yaml

1.静态资源

链接:https://pan.baidu.com/s/1t3BrvIaUXPnwfsbDvakykQ

提取码:f5h6

狂神说JAVA SpringBoot员工管理系统_第1张图片

2.配置首页

1)命名空间

xmlns:th="http://www.thymeleaf.org"

2)用th:接管属性 @{URL}

 访问根目录下的
 访问同级目录下的

狂神说JAVA SpringBoot员工管理系统_第2张图片

3)接管MvcConfig(创建一个类实现‘WebMvcConfigurer’接口)

4)添加视图控制器

狂神说JAVA SpringBoot员工管理系统_第3张图片

3.登录页国际化

1)配置.properties

狂神说JAVA SpringBoot员工管理系统_第4张图片

2)用th:接管属性 #{properties中的属性}

3)设在超链接接受参数

狂神说JAVA SpringBoot员工管理系统_第5张图片

4)接管地区解释器(创建一个类实现’MyLocaleResolver’接口)

5)重写方法

狂神说JAVA SpringBoot员工管理系统_第6张图片

6)到配置类中注册Bean

狂神说JAVA SpringBoot员工管理系统_第7张图片

7)配置类中配置

spring:
  messages:
    basename: i18n.login

4.登录拦截器

1)创建一个类实现拦截器‘HandlerInterceptor’接口

2)默认重写三个方法

狂神说JAVA SpringBoot员工管理系统_第8张图片

3)配置类中添加拦截器,设置拦截哪些请求,放行哪些请求。

在这里插入图片描述

5.提取页面公共部分作为组件

1)

th:fragment
th:insert
th:resplace
~{路径::组件名}

2)

commons.html

狂神说JAVA SpringBoot员工管理系统_第9张图片

dashboard.html

狂神说JAVA SpringBoot员工管理系统_第10张图片

list.html

狂神说JAVA SpringBoot员工管理系统_第11张图片

6.展示员工列表

1)侧边栏高亮(页面传参)

狂神说JAVA SpringBoot员工管理系统_第12张图片

狂神说JAVA SpringBoot员工管理系统_第13张图片

a.用th:接管class属性,if三目运算

狂神说JAVA SpringBoot员工管理系统_第14张图片

b.组件传参(k=v)

狂神说JAVA SpringBoot员工管理系统_第15张图片

2)伪造数据(准备工作)

狂神说JAVA SpringBoot员工管理系统_第16张图片

3)获取数据(创建一个‘Controller’类)

狂神说JAVA SpringBoot员工管理系统_第17张图片

4)修改list.html 展示数据(th:each遍历)

狂神说JAVA SpringBoot员工管理系统_第18张图片

7.增加员工

1)添加员工按钮

狂神说JAVA SpringBoot员工管理系统_第19张图片

2)请求跳转页面

狂神说JAVA SpringBoot员工管理系统_第20张图片

3)添加(restful风格) (表单post)(departments特殊类型)

4)返回员工页面

狂神说JAVA SpringBoot员工管理系统_第21张图片

5)日期格式设置

狂神说JAVA SpringBoot员工管理系统_第22张图片

狂神说JAVA SpringBoot员工管理系统_第23张图片

8.修改员工信息

1)编辑按钮跳转并携带信息(地址传参)

在这里插入图片描述

2)信息显示 (update.html)

3)修改

4)提交返回员工列表

狂神说JAVA SpringBoot员工管理系统_第24张图片

9.删除员工信息

1)删除按钮携带信息请求(地址传参)

在这里插入图片描述

2)删除

3)返回员工列表

狂神说JAVA SpringBoot员工管理系统_第25张图片

10.注销和404

1)404

狂神说JAVA SpringBoot员工管理系统_第26张图片

2)注销(移除seesion中的对应属性)

狂神说JAVA SpringBoot员工管理系统_第27张图片

狂神说JAVA SpringBoot员工管理系统_第28张图片

源码:

index.html


<html lang="en" xmlns:th="http://www.thymeleaf.org">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
		<meta name="description" content="">
		<meta name="author" content="">
		<title>Signin Template for Bootstraptitle>
		
		<link th:href="@{/css/bootstrap.min.css}" rel="stylesheet">
		
		<link th:href="@{/css/signin.css}" rel="stylesheet">
	head>

	<body class="text-center">
		<form class="form-signin" th:action="@{/user/login}">
			<img class="mb-4" th:src="@{/img/bootstrap-solid.svg}" alt="" width="72" height="72">
			<h1 class="h3 mb-3 font-weight-normal" th:text="#{login.tip}">h1>
			
			<p style="color: #ff0000" th:text="${msg}" th:if="${not #strings.isEmpty(msg)}">p>
			<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="">
			<div class="checkbox mb-3">
          	<input type="checkbox" th:text="#{login.remember}">
			div>
			<button class="btn btn-lg btn-primary btn-block" type="submit" th:text="#{login.btn}">button>
			<p class="mt-5 mb-3 text-muted">© 2017-2018p>
			
			<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')}">Englisha>
		form>

	body>

html>

dashboard.html



<html lang="en" xmlns:th="http://www.thymeleaf.org">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
		<meta name="description" content="">
		<meta name="author" content="">

		<title>Dashboard Template for Bootstraptitle>
		
		<link th:href="@{/css/bootstrap.min.css}" rel="stylesheet">

		
		<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>
	head>

	<body>
		<div th:insert="~{commons/commons::topbar}">div>
		<div class="container-fluid">
			<div class="row">
				<div th:insert="~{commons/commons::sidebar(active='main.html')}">div>
				<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">Dashboardh1>
						<div class="btn-toolbar mb-2 mb-md-0">
							<div class="btn-group mr-2">
								<button class="btn btn-sm btn-outline-secondary">Sharebutton>
								<button class="btn btn-sm btn-outline-secondary">Exportbutton>
							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>
		div>

		
		
		<script type="text/javascript" src="asserts/js/jquery-3.2.1.slim.min.js" >script>
		<script type="text/javascript" src="asserts/js/popper.min.js" >script>
		<script type="text/javascript" src="asserts/js/bootstrap.min.js" >script>

		
		<script type="text/javascript" src="asserts/js/feather.min.js" >script>
		<script>
			feather.replace()
		script>

		
		<script type="text/javascript" src="asserts/js/Chart.min.js" >script>
		<script>
			var ctx = document.getElementById("myChart");
			var myChart = new Chart(ctx, {
      
				type: 'line',
				data: {
      
					labels: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
					datasets: [{
      
						data: [15339, 21345, 18483, 24003, 23489, 24092, 12034],
						lineTension: 0,
						backgroundColor: 'transparent',
						borderColor: '#007bff',
						borderWidth: 4,
						pointBackgroundColor: '#007bff'
					}]
				},
				options: {
      
					scales: {
      
						yAxes: [{
      
							ticks: {
      
								beginAtZero: false
							}
						}]
					},
					legend: {
      
						display: false,
					}
				}
			});
		script>

	body>

html>

commons.html


<html lang="en" xmlns:th="http://www.thymeleaf.org">


<nav class="navbar navbar-dark sticky-top bg-dark flex-md-nowrap p-0" th:fragment="topbar">
    <a class="navbar-brand col-sm-3 col-md-2 mr-0" href="http://getbootstrap.com/docs/4.0/examples/dashboard/#"> [[${session.loginUser}]]a>
    <input class="form-control form-control-dark w-100" type="text" placeholder="Search" aria-label="Search">
    <ul class="navbar-nav px-3">
        <li class="nav-item text-nowrap">
            <a class="nav-link" th:href="@{/out}">注销a>
        li>
    ul>
nav>

<nav class="col-md-2 d-none d-md-block bg-light sidebar" th:fragment="sidebar">
    <div class="sidebar-sticky">
        <ul class="nav flex-column">
            <li class="nav-item">
                <a th:class="${active=='main.html'?'nav-link active':'nav-link'}" th:href="@{/main.html}">
                    <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-home">
                        <path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z">path>
                        <polyline points="9 22 9 12 15 12 15 22">polyline>
                    svg>
                    Dashboard <span class="sr-only">(current)span>
                a>
            li>
            <li class="nav-item">
                <a class="nav-link" href="http://getbootstrap.com/docs/4.0/examples/dashboard/#">
                    <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-file">
                        <path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z">path>
                        <polyline points="13 2 13 9 20 9">polyline>
                    svg>
                    Orders
                a>
            li>
            <li class="nav-item">
                <a class="nav-link" href="http://getbootstrap.com/docs/4.0/examples/dashboard/#">
                    <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-shopping-cart">
                        <circle cx="9" cy="21" r="1">circle>
                        <circle cx="20" cy="21" r="1">circle>
                        <path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6">path>
                    svg>
                    Products
                a>
            li>
            <li class="nav-item">
                <a th:class="${active=='list.html'?'nav-link active':'nav-link'}" th:href="@{/emps}">
                    <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-users">
                        <path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2">path>
                        <circle cx="9" cy="7" r="4">circle>
                        <path d="M23 21v-2a4 4 0 0 0-3-3.87">path>
                        <path d="M16 3.13a4 4 0 0 1 0 7.75">path>
                    svg>
                    员工管理
                a>
            li>
            <li class="nav-item">
                <a class="nav-link" href="http://getbootstrap.com/docs/4.0/examples/dashboard/#">
                    <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-bar-chart-2">
                        <line x1="18" y1="20" x2="18" y2="10">line>
                        <line x1="12" y1="20" x2="12" y2="4">line>
                        <line x1="6" y1="20" x2="6" y2="14">line>
                    svg>
                    Reports
                a>
            li>
            <li class="nav-item">
                <a class="nav-link" href="http://getbootstrap.com/docs/4.0/examples/dashboard/#">
                    <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-layers">
                        <polygon points="12 2 2 7 12 12 22 7 12 2">polygon>
                        <polyline points="2 17 12 22 22 17">polyline>
                        <polyline points="2 12 12 17 22 12">polyline>
                    svg>
                    Integrations
                a>
            li>
        ul>

        <h6 class="sidebar-heading d-flex justify-content-between align-items-center px-3 mt-4 mb-1 text-muted">
            <span>Saved reportsspan>
            <a class="d-flex align-items-center text-muted" href="http://getbootstrap.com/docs/4.0/examples/dashboard/#">
                <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-plus-circle"><circle cx="12" cy="12" r="10">circle><line x1="12" y1="8" x2="12" y2="16">line><line x1="8" y1="12" x2="16" y2="12">line>svg>
            a>
        h6>
        <ul class="nav flex-column mb-2">
            <li class="nav-item">
                <a class="nav-link" href="http://getbootstrap.com/docs/4.0/examples/dashboard/#">
                    <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-file-text">
                        <path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z">path>
                        <polyline points="14 2 14 8 20 8">polyline>
                        <line x1="16" y1="13" x2="8" y2="13">line>
                        <line x1="16" y1="17" x2="8" y2="17">line>
                        <polyline points="10 9 9 9 8 9">polyline>
                    svg>
                    Current month
                a>
            li>
            <li class="nav-item">
                <a class="nav-link" href="http://getbootstrap.com/docs/4.0/examples/dashboard/#">
                    <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-file-text">
                        <path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z">path>
                        <polyline points="14 2 14 8 20 8">polyline>
                        <line x1="16" y1="13" x2="8" y2="13">line>
                        <line x1="16" y1="17" x2="8" y2="17">line>
                        <polyline points="10 9 9 9 8 9">polyline>
                    svg>
                    Last quarter
                a>
            li>
            <li class="nav-item">
                <a class="nav-link" href="http://getbootstrap.com/docs/4.0/examples/dashboard/#">
                    <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-file-text">
                        <path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z">path>
                        <polyline points="14 2 14 8 20 8">polyline>
                        <line x1="16" y1="13" x2="8" y2="13">line>
                        <line x1="16" y1="17" x2="8" y2="17">line>
                        <polyline points="10 9 9 9 8 9">polyline>
                    svg>
                    Social engagement
                a>
            li>
            <li class="nav-item">
                <a class="nav-link" href="http://getbootstrap.com/docs/4.0/examples/dashboard/#">
                    <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-file-text">
                        <path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z">path>
                        <polyline points="14 2 14 8 20 8">polyline>
                        <line x1="16" y1="13" x2="8" y2="13">line>
                        <line x1="16" y1="17" x2="8" y2="17">line>
                        <polyline points="10 9 9 9 8 9">polyline>
                    svg>
                    Year-end sale
                a>
            li>
        ul>
    div>
nav>
html>

list.html



<html lang="en" xmlns:th="http://www.thymeleaf.org">

	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
		<meta name="description" content="">
		<meta name="author" content="">

		<title>Dashboard Template for Bootstraptitle>
		
		<link th:href="@{/css/bootstrap.min.css}" rel="stylesheet">

		
		<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>
	head>

	<body>
		<div th:insert="~{commons/commons::topbar}">div>

		<div class="container-fluid">
			<div class="row">
				<div th:insert="~{commons/commons::sidebar(active='list.html')}">div>

				<main role="main" class="col-md-9 ml-sm-auto col-lg-10 pt-3 px-4">
					<h2><a class="btn btn-sm btn-success" th:href="@{/emp}">添加员工a>h2>
					<div class="table-responsive">
						<table class="table table-striped table-sm">
							<thead>
								<tr>
									<th>编号th>
									<th>姓名th>
									<th>邮箱th>
									<th>性别th>
									<th>所属部门th>
									<th>生日th>
									<th>操作th>
								tr>
							thead>
							<tbody>
								<tr th:each="emp:${emps}">
									<td th:text="${emp.getId()}">td>
									<td th:text="${emp.getLastName()}">td>
									<td th:text="${emp.getEmail()}">td>
									<td th:text="${emp.getGander()==0?'':''}">td>
									<td th:text="${emp.getDepartment().getDepartmentName()}">td>
									<td th:text="${#dates.format(emp.getBirth(),'yyyy-MM-dd')}">td>
									<td>
										<a class="btn btn-sm btn-primary" th:href="@{/emp/}+${emp.getId()}">编辑a>
										<a class="btn btn-sm btn-danger" th:href="@{/emp/delete/}+${emp.getId()}">删除a>
									td>
								tr>
							tbody>
						table>
					div>
				main>
			div>
		div>

		
		
		<script type="text/javascript" src="asserts/js/jquery-3.2.1.slim.min.js">script>
		<script type="text/javascript" src="asserts/js/popper.min.js">script>
		<script type="text/javascript" src="asserts/js/bootstrap.min.js">script>

		
		<script type="text/javascript" src="asserts/js/feather.min.js">script>
		<script>
			feather.replace()
		script>

		
		<script type="text/javascript" src="asserts/js/Chart.min.js">script>
		<script>
			var ctx = document.getElementById("myChart");
			var myChart = new Chart(ctx, {
      
				type: 'line',
				data: {
      
					labels: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
					datasets: [{
      
						data: [15339, 21345, 18483, 24003, 23489, 24092, 12034],
						lineTension: 0,
						backgroundColor: 'transparent',
						borderColor: '#007bff',
						borderWidth: 4,
						pointBackgroundColor: '#007bff'
					}]
				},
				options: {
      
					scales: {
      
						yAxes: [{
      
							ticks: {
      
								beginAtZero: false
							}
						}]
					},
					legend: {
      
						display: false,
					}
				}
			});
		script>

	body>

html>

add.html



<html lang="en" xmlns:th="http://www.thymeleaf.org">

	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
		<meta name="description" content="">
		<meta name="author" content="">

		<title>Dashboard Template for Bootstraptitle>
		
		<link th:href="@{/css/bootstrap.min.css}" rel="stylesheet">

		
		<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>
	head>

	<body>
		<div th:insert="~{commons/commons::topbar}">div>

		<div class="container-fluid">
			<div class="row">
				<div th:insert="~{commons/commons::sidebar(active='list.html')}">div>

				<main role="main" class="col-md-9 ml-sm-auto col-lg-10 pt-3 px-4">
					<form class="form-horizontal" th:action="@{/emp}" method="post">
						<div class="form-group">
							<label class="col-sm-2 control-label">姓名label>
							<div class="col-sm-10">
								<input name="lastName" type="text" class="form-control"  placeholder="姓名">
							div>
						div>
						<div class="form-group">
							<label class="col-sm-2 control-label">Emaillabel>
							<div class="col-sm-10">
								<input name="email" type="email" class="form-control" placeholder="Email">
							div>
						div>
						<div class="form-group">
							<label class="col-sm-2 control-label">性别label>
							<div class="form-check form-check-inline">
								<input name="gander" type="radio" class="form-check-input" value="1">
								<label class="form-check-label">label>
							div>
							<div class="form-check form-check-inline">
								<input name="gander" type="radio" class="form-check-input" value="0">
								<label class="form-check-label">label>
							div>
						div>
						<div class="form-group">
							<label class="col-sm-2 control-label">所属部门label>
							<select class="form-control col-sm-10" name="department.id">
								<option th:each="dept:${departments}" th:text="${dept.getDepartmentName()}" th:value="${dept.getId()}">option>
							select>
						div>
						<div class="form-group">
							<label class="col-sm-2 control-label">生日label>
							<div class="col-sm-10">
								<input name="birth" type="text" class="form-control" placeholder="1975-01-01">
							div>
						div>
						<div class="form-group">
							<div class="col-sm-offset-2 col-sm-10">
								<button type="submit" class="btn btn-default">添加button>
							div>
						div>
					form>
				main>
			div>
		div>

		
		
		<script type="text/javascript" src="asserts/js/jquery-3.2.1.slim.min.js">script>
		<script type="text/javascript" src="asserts/js/popper.min.js">script>
		<script type="text/javascript" src="asserts/js/bootstrap.min.js">script>

		
		<script type="text/javascript" src="asserts/js/feather.min.js">script>
		<script>
			feather.replace()
		script>

		
		<script type="text/javascript" src="asserts/js/Chart.min.js">script>
		<script>
			var ctx = document.getElementById("myChart");
			var myChart = new Chart(ctx, {
      
				type: 'line',
				data: {
      
					labels: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
					datasets: [{
      
						data: [15339, 21345, 18483, 24003, 23489, 24092, 12034],
						lineTension: 0,
						backgroundColor: 'transparent',
						borderColor: '#007bff',
						borderWidth: 4,
						pointBackgroundColor: '#007bff'
					}]
				},
				options: {
      
					scales: {
      
						yAxes: [{
      
							ticks: {
      
								beginAtZero: false
							}
						}]
					},
					legend: {
      
						display: false,
					}
				}
			});
		script>

	body>

html>

update.html



<html lang="en" xmlns:th="http://www.thymeleaf.org">

	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
		<meta name="description" content="">
		<meta name="author" content="">

		<title>Dashboard Template for Bootstraptitle>
		
		<link th:href="@{/css/bootstrap.min.css}" rel="stylesheet">

		
		<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>
	head>

	<body>
		<div th:insert="~{commons/commons::topbar}">div>

		<div class="container-fluid">
			<div class="row">
				<div th:insert="~{commons/commons::sidebar(active='list.html')}">div>

				<main role="main" class="col-md-9 ml-sm-auto col-lg-10 pt-3 px-4">
					<form class="form-horizontal" th:action="@{/emp/update}" method="post">
						<input type="hidden" name="id" th:value="${emp.getId()}">
						<div class="form-group">
							<label class="col-sm-2 control-label">姓名label>
							<div class="col-sm-10">
								<input th:value="${emp.getLastName()}" name="lastName" type="text" class="form-control"  placeholder="姓名">
							div>
						div>
						<div class="form-group">
							<label class="col-sm-2 control-label">Emaillabel>
							<div class="col-sm-10">
								<input th:value="${emp.getEmail()}" name="email" type="email" class="form-control" placeholder="Email">
							div>
						div>
						<div class="form-group">
							<label class="col-sm-2 control-label">性别label>
							<div class="form-check form-check-inline">
								<input th:checked="${emp.getGander()==1}" name="gander" type="radio" class="form-check-input" value="1">
								<label class="form-check-label">label>
							div>
							<div class="form-check form-check-inline">
								<input th:checked="${emp.getGander()==0}" name="gander" type="radio" class="form-check-input" value="0">
								<label class="form-check-label">label>
							div>
						div>
						<div class="form-group">
							<label class="col-sm-2 control-label">所属部门label>
							<select class="form-control col-sm-10" name="department.id">
								<option th:selected="${dept.getId()==emp.getDepartment().getId()}" th:each="dept:${departments}" th:text="${dept.getDepartmentName()}" th:value="${dept.getId()}">option>
							select>
						div>
						<div class="form-group">
							<label class="col-sm-2 control-label">生日label>
							<div class="col-sm-10">
								<input th:value="${#dates.format(emp.getBirth(),'yyyy-MM-dd')}" name="birth" type="text" class="form-control" placeholder="1975-01-01">
							div>
						div>
						<div class="form-group">
							<div class="col-sm-offset-2 col-sm-10">
								<button type="submit" class="btn btn-default">修改button>
							div>
						div>
					form>
				main>
			div>
		div>

		
		
		<script type="text/javascript" src="asserts/js/jquery-3.2.1.slim.min.js">script>
		<script type="text/javascript" src="asserts/js/popper.min.js">script>
		<script type="text/javascript" src="asserts/js/bootstrap.min.js">script>

		
		<script type="text/javascript" src="asserts/js/feather.min.js">script>
		<script>
			feather.replace()
		script>

		
		<script type="text/javascript" src="asserts/js/Chart.min.js">script>
		<script>
			var ctx = document.getElementById("myChart");
			var myChart = new Chart(ctx, {
      
				type: 'line',
				data: {
      
					labels: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
					datasets: [{
      
						data: [15339, 21345, 18483, 24003, 23489, 24092, 12034],
						lineTension: 0,
						backgroundColor: 'transparent',
						borderColor: '#007bff',
						borderWidth: 4,
						pointBackgroundColor: '#007bff'
					}]
				},
				options: {
      
					scales: {
      
						yAxes: [{
      
							ticks: {
      
								beginAtZero: false
							}
						}]
					},
					legend: {
      
						display: false,
					}
				}
			});
		script>

	body>

html>

404.html



<html lang="en" xmlns:th="http://www.thymeleaf.org">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
		<meta name="description" content="">
		<meta name="author" content="">

		<title>Dashboard Template for Bootstraptitle>
		
		<link th:href="@{/css/bootstrap.min.css}" rel="stylesheet">

		
		<link th:href="@{asserts/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>
	head>

	<body>
		<nav class="navbar navbar-dark sticky-top bg-dark flex-md-nowrap p-0">
			<a class="navbar-brand col-sm-3 col-md-2 mr-0" href="http://getbootstrap.com/docs/4.0/examples/dashboard/#">Company namea>
			<input class="form-control form-control-dark w-100" type="text" placeholder="Search" aria-label="Search">
			<ul class="navbar-nav px-3">
				<li class="nav-item text-nowrap">
					<a class="nav-link" href="http://getbootstrap.com/docs/4.0/examples/dashboard/#">Sign outa>
				li>
			ul>
		nav>

		<div class="container-fluid">
			<div class="row">
				<nav class="col-md-2 d-none d-md-block bg-light sidebar">
					<div class="sidebar-sticky">
						<ul class="nav flex-column">
							<li class="nav-item">
								<a class="nav-link active" href="http://getbootstrap.com/docs/4.0/examples/dashboard/#">
									<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-home">
										<path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z">path>
										<polyline points="9 22 9 12 15 12 15 22">polyline>
									svg>
									Dashboard <span class="sr-only">(current)span>
								a>
							li>
							<li class="nav-item">
								<a class="nav-link" href="http://getbootstrap.com/docs/4.0/examples/dashboard/#">
									<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-file">
										<path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z">path>
										<polyline points="13 2 13 9 20 9">polyline>
									svg>
									Orders
								a>
							li>
							<li class="nav-item">
								<a class="nav-link" href="http://getbootstrap.com/docs/4.0/examples/dashboard/#">
									<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-shopping-cart">
										<circle cx="9" cy="21" r="1">circle>
										<circle cx="20" cy="21" r="1">circle>
										<path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6">path>
									svg>
									Products
								a>
							li>
							<li class="nav-item">
								<a class="nav-link" href="http://getbootstrap.com/docs/4.0/examples/dashboard/#">
									<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-users">
										<path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2">path>
										<circle cx="9" cy="7" r="4">circle>
										<path d="M23 21v-2a4 4 0 0 0-3-3.87">path>
										<path d="M16 3.13a4 4 0 0 1 0 7.75">path>
									svg>
									Customers
								a>
							li>
							<li class="nav-item">
								<a class="nav-link" href="http://getbootstrap.com/docs/4.0/examples/dashboard/#">
									<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-bar-chart-2">
										<line x1="18" y1="20" x2="18" y2="10">line>
										<line x1="12" y1="20" x2="12" y2="4">line>
										<line x1="6" y1="20" x2="6" y2="14">line>
									svg>
									Reports
								a>
							li>
							<li class="nav-item">
								<a class="nav-link" href="http://getbootstrap.com/docs/4.0/examples/dashboard/#">
									<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-layers">
										<polygon points="12 2 2 7 12 12 22 7 12 2">polygon>
										<polyline points="2 17 12 22 22 17">polyline>
										<polyline points="2 12 12 17 22 12">polyline>
									svg>
									Integrations
								a>
							li>
						ul>

						<h6 class="sidebar-heading d-flex justify-content-between align-items-center px-3 mt-4 mb-1 text-muted">
              <span>Saved reportsspan>
              <a class="d-flex align-items-center text-muted" href="http://getbootstrap.com/docs/4.0/examples/dashboard/#">
                <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-plus-circle"><circle cx="12" cy="12" r="10">circle><line x1="12" y1="8" x2="12" y2="16">line><line x1="8" y1="12" x2="16" y2="12">line>svg>
              a>
            h6>
						<ul class="nav flex-column mb-2">
							<li class="nav-item">
								<a class="nav-link" href="http://getbootstrap.com/docs/4.0/examples/dashboard/#">
									<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-file-text">
										<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z">path>
										<polyline points="14 2 14 8 20 8">polyline>
										<line x1="16" y1="13" x2="8" y2="13">line>
										<line x1="16" y1="17" x2="8" y2="17">line>
										<polyline points="10 9 9 9 8 9">polyline>
									svg>
									Current month
								a>
							li>
							<li class="nav-item">
								<a class="nav-link" href="http://getbootstrap.com/docs/4.0/examples/dashboard/#">
									<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-file-text">
										<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z">path>
										<polyline points="14 2 14 8 20 8">polyline>
										<line x1="16" y1="13" x2="8" y2="13">line>
										<line x1="16" y1="17" x2="8" y2="17">line>
										<polyline points="10 9 9 9 8 9">polyline>
									svg>
									Last quarter
								a>
							li>
							<li class="nav-item">
								<a class="nav-link" href="http://getbootstrap.com/docs/4.0/examples/dashboard/#">
									<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-file-text">
										<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z">path>
										<polyline points="14 2 14 8 20 8">polyline>
										<line x1="16" y1="13" x2="8" y2="13">line>
										<line x1="16" y1="17" x2="8" y2="17">line>
										<polyline points="10 9 9 9 8 9">polyline>
									svg>
									Social engagement
								a>
							li>
							<li class="nav-item">
								<a class="nav-link" href="http://getbootstrap.com/docs/4.0/examples/dashboard/#">
									<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-file-text">
										<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z">path>
										<polyline points="14 2 14 8 20 8">polyline>
										<line x1="16" y1="13" x2="8" y2="13">line>
										<line x1="16" y1="17" x2="8" y2="17">line>
										<polyline points="10 9 9 9 8 9">polyline>
									svg>
									Year-end sale
								a>
							li>
						ul>
					div>
				nav>

				<main role="main" class="col-md-9 ml-sm-auto col-lg-10 pt-3 px-4">
					<h1>404h1>
				main>
			div>
		div>

		
		
		<script type="text/javascript" src="asserts/js/jquery-3.2.1.slim.min.js" >script>
		<script type="text/javascript" src="asserts/js/popper.min.js" >script>
		<script type="text/javascript" src="asserts/js/bootstrap.min.js" >script>

		
		<script type="text/javascript" src="asserts/js/feather.min.js" >script>
		<script>
			feather.replace()
		script>

		
		<script type="text/javascript" src="asserts/js/Chart.min.js" >script>
		<script>
			var ctx = document.getElementById("myChart");
			var myChart = new Chart(ctx, {
      
				type: 'line',
				data: {
      
					labels: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
					datasets: [{
      
						data: [15339, 21345, 18483, 24003, 23489, 24092, 12034],
						lineTension: 0,
						backgroundColor: 'transparent',
						borderColor: '#007bff',
						borderWidth: 4,
						pointBackgroundColor: '#007bff'
					}]
				},
				options: {
      
					scales: {
      
						yAxes: [{
      
							ticks: {
      
								beginAtZero: false
							}
						}]
					},
					legend: {
      
						display: false,
					}
				}
			});
		script>

	body>

html>

LoginHandlerInterceptor.java

package com.kuang.config;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import org.thymeleaf.util.StringUtils;

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

public class LoginHandlerInterceptor implements HandlerInterceptor {
     
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
     
        //登录成功之后应该有session
        Object loginUser = request.getSession().getAttribute("loginUser");
        if(loginUser==null){
     
            //没有登录
            request.setAttribute("msg","没有权限,请先登录");
            request.getRequestDispatcher("/index.html").forward(request,response);
            return false;
        }
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
     

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
     

    }
}

MyLocaleResolver.java

package com.kuang.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;

//地区解析器
public class MyLocaleResolver implements LocaleResolver {
     
    @Override
    public Locale resolveLocale(HttpServletRequest request) {
     
        String language = request.getParameter("l");
        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) {
     

    }
}

MyMvcConfig.java

	package com.kuang.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;

@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
     

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
     
        registry.addViewController("/").setViewName("index");
        registry.addViewController("/index.html").setViewName("index");
        registry.addViewController("/main.html").setViewName("dashboard");

    }

    @Bean
    public LocaleResolver localeResolver(){
     
        return new MyLocaleResolver();
    }

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

EmployeeController.java

package com.kuang.controller;


import com.kuang.dao.DepartmentDao;
import com.kuang.dao.EmployeeDao;
import com.kuang.pojo.Department;
import com.kuang.pojo.Employee;
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 org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpSession;
import java.util.Collection;


@Controller
public class EmployeeController {
     

    @Autowired
    private EmployeeDao employeeDao;
    @Autowired
    private DepartmentDao departmentDao;

    @RequestMapping("/emps")
    public String list(Model model){
     
        Collection<Employee> employees = employeeDao.getAll();
        model.addAttribute("emps",employees);
        return "emp/list";
    }

    @GetMapping("/emp")
    public String toAddpage(Model model){
     
        //查出所有部门
        Collection<Department> departments = departmentDao.getDepartments();
        model.addAttribute("departments",departments);
        return "emp/add";
    }

    @PostMapping("/emp")
    public String Add(Employee employee){
     
        //添加操作
        employeeDao.save(employee);
        return "redirect:/emps";
    }

    @GetMapping("/emp/{id}")
    public String toUpdate(@PathVariable("id") Integer id,Model model){
     
        //查出原来的数据
        Employee employee = employeeDao.getEmployeeById(id);
        model.addAttribute("emp",employee);
        //查出所有部门
        Collection<Department> departments = departmentDao.getDepartments();
        model.addAttribute("departments",departments);
        return "emp/update";
    }

    @PostMapping("/emp/update")
    public String Update(Employee employee){
     
        employeeDao.save(employee);
        return "redirect:/emps";
    }

    @RequestMapping("/emp/delete/{id}")
    public String Delete(@PathVariable("id") Integer id){
     
        employeeDao.deleteEmployeeById(id);
        return "redirect:/emps";
    }

    @RequestMapping("/out")
    public String loginOut(HttpSession session){
     
        session.removeAttribute("loginUser");
        return "redirect:/";
    }
}

LoginController.java

package com.kuang.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.thymeleaf.util.StringUtils;

import javax.servlet.http.HttpSession;

@Controller
public class LoginController {
     

    @RequestMapping("/user/login")
    public String Loginin(
            @RequestParam("username") String username,
            @RequestParam("password") String password,
            Model model, HttpSession session){
     
        //调用业务层 登录判断
        if(!StringUtils.isEmpty(username)&&password.equals("123456")){
     
            //保存登录状态
            session.setAttribute("loginUser",username);
            return "redirect:/main.html";
        }

        model.addAttribute("msg","用户名或密码错误!");
        return "index";
    }




}

DepartmentDao.java

package com.kuang.dao;


import com.kuang.pojo.Department;
import org.springframework.stereotype.Repository;


import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

@Repository
public class DepartmentDao {
     
    //模拟数据库中的数据
    private static Map<Integer, Department> departments = null;
    static{
     
        departments = new HashMap<Integer, Department>();
        departments.put(101,new Department(101,"教学部"));
        departments.put(102,new Department(102,"市场部"));
        departments.put(103,new Department(103,"教研部"));
        departments.put(104,new Department(104,"运营部"));
        departments.put(105,new Department(105,"后勤部"));
    }

    public Collection<Department> getDepartments(){
     
        return departments.values();
    }

    public Department getDepartmentById(Integer id){
     
        return departments.get(id);
    }
}

EmployeeDao.java

package com.kuang.dao;

import com.kuang.pojo.Department;
import com.kuang.pojo.Employee;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

@Repository
public class EmployeeDao {
     

    //模拟数据库中的数据
    private static Map<Integer, Employee> employees = null;

    @Autowired
    private DepartmentDao departmentDao;

    static {
     
        employees = new HashMap<Integer, Employee>();
        employees.put(1001, new Employee(1001, "AA1", "[email protected]", 1, new Department(101, "教学部"), new Date()));
        employees.put(1002, new Employee(1002, "AA2", "[email protected]", 0, new Department(102, "市场部"), new Date()));
        employees.put(1003, new Employee(1003, "AA3", "[email protected]", 1, new Department(103, "教研部"), new Date()));
        employees.put(1004, new Employee(1004, "AA4", "[email protected]", 0, new Department(104, "运营部"), new Date()));
        employees.put(1005, new Employee(1005, "AA5", "[email protected]", 1, new Department(105, "后勤部"), new Date()));
    }

    //主键自增
    private static Integer initId = 1006;
    //增加一位员工
    public void save(Employee employee){
     
        if(employee.getId()==null){
     
            employee.setId(initId++);
        }
        employee.setDepartment(departmentDao.getDepartmentById(employee.getDepartment().getId()));
        employees.put(employee.getId(),employee);
    }

    //查询全部员工
    public Collection<Employee> getAll(){
     
        return employees.values();
    }

    //通过ID查询员工
    public Employee getEmployeeById(Integer id){
     
        return employees.get(id);
    }

    //通过ID删除一位员工
    public void deleteEmployeeById(Integer id){
     
        employees.remove(id);
    }

}

Department.java

package com.kuang.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Department {
     
    private Integer id;
    private String departmentName;
}

Employee.java

package com.kuang.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Employee {
     
    private Integer id;
    private String lastName;
    private String email;
    private Integer gander;
    private Department department;
    private Date birth;
}

login.properties

login.btn=登录
login.password=密码
login.remember=记住我
login.tip=请登录
login.username=用户名

login.btn=Sign in
login.password=Password
login.remember=Remember me
login.tip=Please sign in
login.username=Username

login.btn=登录
login.password=密码
login.remember=记住我
login.tip=请登录
login.username=用户名

application.yaml

server:
  port: 8089

spring:
  messages:
    basename: i18n.login
  mvc:
    format:
      date: yyyy-MM-dd

你可能感兴趣的:(java,spring,boot,intellij,idea)