> 文章列表 > Nosql与Redis期末考核项目回顾

Nosql与Redis期末考核项目回顾

Nosql与Redis期末考核项目回顾

文章目录

    • 期末考核要求
    • 一、后端代码部分
      • 1. controller层
      • 2. bean层
      • 3. cache层
      • 4. mapper层
      • 5. service层
      • 6. util层
      • 7. resources层
      • 8. test 层
    • 二、前端部分
    • 三、数据库设计
    • 四、相关截图

期末考核要求

在 MySQL 中创建数据表 emp、dep 表。
emp 表存储员工信息,包含编号、姓名、密码、薪水、所在部门编号、入职时间
dep 表存储部门信息,包含部门编号、部门名称、经理编号
编写 Java 服务器程序实现以下功能:

  1. 用户通过员工编号和密码进行登录
  2. 登录后可以查看所有部门的部门名称,查询的部门名称使用 redis 进行缓存,缓存周期为 10 小时,缓存过期将重新查询并写入 redis
  3. 点击部门名称可以查看该部门的人员信息:如果登录人是该部门的经理,则可以查看该
    部门的所有员工姓名、薪水、入职时间;如果登录人本部门员工,则可以查看该部门的所有
    员工姓名和入职时间;如果登录人非本部门员工则提示信息无权查看。 所有查看的信息
    都写入缓存,缓存周期为 5 分钟
  4. 点击员工姓名,如果登录人是员工本人,则可以对登录密码进行修改,否则提示错误信息

一、后端代码部分

1. controller层

1.1 DeptController

package com.igeek.controller;
import com.igeek.bean.Dept;
import com.igeek.bean.User;
import com.igeek.service.DeptService;
import com.igeek.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.RequestMapping;
import java.util.List;@Controller
public class DeptController {@Autowiredprivate DeptService deptService;@Autowiredprivate UserService userService;@RequestMapping("department")public String getDept(String depno,String userDepno, Model model){List<User> users = deptService.queryByDeptNO(depno);Dept dept = deptService.queryByNo(depno);model.addAttribute("depList", users);model.addAttribute("dept", dept);if (userDepno.equals(depno)){return "worker";}elsereturn "404";}@RequestMapping("modify")public String modifyPwd(String modifyUser,String userid){if (modifyUser.equals(userid)){return "modify";}else {return "404";}}@RequestMapping("update")public String updatePwd(String oldpwd,String newpwd,String userid){User user = userService.queryUserById(userid);if (user.getPassword().equals(oldpwd)){if (oldpwd.equals(newpwd)){return "404";}else {userService.updatePwd(userid, newpwd);return "update";}}else {return "404";}}
}

1.2 JumController

package com.igeek.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
public class JumpController {@RequestMapping("login")public String jumpToLogin(){return "login";}
}

1.3 LoginController

package com.igeek.controller;import com.igeek.bean.Dept;
import com.igeek.bean.User;
import com.igeek.service.DeptService;
import com.igeek.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.RequestMapping;
import java.util.List;@Controller
public class LoginController {@Autowiredprivate UserService userService;@Autowiredprivate DeptService deptService;@RequestMapping("Login")public String loginToPage(String userid, String password, Model model) {if (userid != null && password != null) {User user = userService.queryUser(userid, password);List<Dept> depts = deptService.queryAllDept();if (user!=null){model.addAttribute("deptList", depts);model.addAttribute("user", user);return "department";}else{return "404";}}return "login";}
}

2. bean层

2.1 com.igeek.bean.Dept

package com.igeek.bean;
public class Dept {private String depno;private String depname;private String managerid;public Dept() {}public Dept(String depno, String depname, String managerid) {this.depno = depno;this.depname = depname;this.managerid = managerid;}public String getDepno() {return depno;}public void setDepno(String depno) {this.depno = depno;}public String getDepname() {return depname;}public void setDepname(String depname) {this.depname = depname;}public String getManagerid() {return managerid;}public void setManagerid(String managerid) {this.managerid = managerid;}@Overridepublic String toString() {return "Dept{" +"depno='" + depno + '\\'' +", depname='" + depname + '\\'' +", managerid='" + managerid + '\\'' +'}';}
}

2.2 com.igeek.bean.User

package com.igeek.bean;
import java.util.Date;public class User {private String userid;private String username;private String password;private double salary;private String depno;private Date workdate;public User() {}public User(String userid, String username, String password, double salary, String depno, Date workdate) {this.userid = userid;this.username = username;this.password = password;this.salary = salary;this.depno = depno;this.workdate = workdate;}public String getUserid() {return userid;}public void setUserid(String userid) {this.userid = userid;}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;}public double getSalary() {return salary;}public void setSalary(double salary) {this.salary = salary;}public String getDepno() {return depno;}public void setDepno(String depno) {this.depno = depno;}public Date getWorkdate() {return workdate;}public void setWorkdate(Date workdate) {this.workdate = workdate;}@Overridepublic String toString() {return "User{" +"userid='" + userid + '\\'' +", username='" + username + '\\'' +", password='" + password + '\\'' +", salary=" + salary +", depno='" + depno + '\\'' +", workdate=" + workdate +'}';}
}

3. cache层

package com.igeek.cache;import org.apache.ibatis.cache.Cache;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;public class RedisCache implements Cache {private static final Logger logger = LoggerFactory.getLogger(RedisCache.class);//    使用spring中管理的redisTamplateprivate static RedisTemplate<String, Object> redisTemplate;private final String id;private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock();@Overridepublic ReadWriteLock getReadWriteLock() {return this.readWriteLock;}public static void setRedisTemplate(RedisTemplate redisTemplate){RedisCache.redisTemplate=redisTemplate;}public RedisCache(String id) {if (id == null) {throw new IllegalArgumentException("Cache require an ID");}this.id = id;}@Overridepublic String getId() {return this.id;}@Overridepublic void putObject(Object key, Object value) {try {logger.info("-----------putObject:key=" + key + ",value=" + value + "-----------");if (value == null) {redisTemplate.opsForValue().set(key.toString(), value, 5, TimeUnit.MINUTES);}} catch (Exception e) {logger.error("redis获取数据异常");e.printStackTrace();}}@Overridepublic Object getObject(Object key) {Object object=null;try {logger.info("-----------putObject:key=" + key +"-----------");if (key != null) {object=redisTemplate.opsForValue().get(key.toString());return object;}} catch (Exception e) {logger.error("redis获取数据异常");e.printStackTrace();}return object;}@Overridepublic Object removeObject(Object key) {Object object=null;try {logger.info("-----------putObject:key=" + key +"-----------");if (key != null) {object=redisTemplate.expire(key.toString(),1,TimeUnit.DAYS);return object;}} catch (Exception e) {logger.error("redis获取数据异常");e.printStackTrace();}return object;}@Overridepublic void clear() {Long size=redisTemplate.execute(new RedisCallback<Long>() {@Overridepublic Long doInRedis(RedisConnection redisConnection) throws DataAccessException {Long size = redisConnection.dbSize();redisConnection.flushDb();redisConnection.flushAll();return size;}});logger.info("------------------clear清除了"+size+"个对象");}@Overridepublic int getSize() {Long size=redisTemplate.execute(new RedisCallback<Long>() {@Overridepublic Long doInRedis(RedisConnection redisConnection) throws DataAccessException {Long size = redisConnection.dbSize();return size;}});return size.intValue();}}

4. mapper层

4.1 DeptMapper


package com.igeek.mapper;import com.igeek.bean.Dept;
import com.igeek.bean.User;import java.util.List;public interface DeptMapper {List<Dept> queryAllDept();Dept queryByNo(String deptno);List<User> queryByDeptNo(String deptno);
}

4.2 DeptMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.igeek.mapper.DeptMapper"><select id="queryAllDept" resultType="com.igeek.bean.Dept">select * from dep</select><select id="queryByDeptNo" resultType="com.igeek.bean.User">select * from emp where depno=#{deptno}</select><select id="queryByNo" resultType="com.igeek.bean.Dept">select * from dep where depno=#{deptno}</select>
</mapper>

4.3. UserMapper

package com.igeek.mapper;
import com.igeek.bean.User;
import org.apache.ibatis.annotations.Param;import java.util.List;public interface UserMapper {User queryUser(@Param("userid") String userid, @Param("password") String password);User queryUserById(String userid);//    User queryAllUser(String depno);List<User> queryAllUsersByDepno(String deptno);Integer updatePwd(@Param("userid") String userid, @Param("password") String password);
}

4.4 UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.igeek.mapper.UserMapper"><cache type="com.igeek.cache.RedisCache"/><select id="queryUser" resultType="com.igeek.bean.User">select * from emp where userid=#{userid} and password=#{password}</select><select id="queryUserById" useCache="true" parameterType="String" resultType="com.igeek.bean.User">SELECT *FROM empwhere userid=#{userid}</select><select id="queryAllUsersByDepno" resultType="com.igeek.bean.User">SELECT *FROM empwhere depno=#{depno}</select><update id="updatePwd">update emp set password=#{password} where userid=#{userid}</update>
</mapper>

5. service层

5.1 DeptService

package com.igeek.service;
import com.igeek.bean.Dept;
import com.igeek.bean.User;
import java.util.List;public interface DeptService {List<Dept> queryAllDept();Dept queryByNo(String deptno);List<User> queryByDeptNO(String deptno);
}

5.2 DeptServiceImpl

package com.igeek.service.Impl;
import com.igeek.mapper.DeptMapper;
import com.igeek.bean.Dept;
import com.igeek.bean.User;
import com.igeek.service.DeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;import java.util.List;
import java.util.concurrent.TimeUnit;@Service
public class DeptServiceImpl implements DeptService {private static RedisTemplate<String, Object> redisTemplate;@Autowiredprivate DeptMapper deptMapper;public DeptServiceImpl(RedisTemplate redisTemplate){this.redisTemplate=redisTemplate;}@Overridepublic List<Dept> queryAllDept() {//从缓存中读取数据List<Dept> allDept = (List<Dept>) redisTemplate.opsForValue().get("ViewStaffData");if (allDept==null) {//若缓存中没有数据,则将从数据库中查询到的数据存入缓存中List<Dept> depts = deptMapper.queryAllDept();redisTemplate.opsForValue().set("ViewStaffData", depts);redisTemplate.expire("ViewStaffData", 10, TimeUnit.HOURS);return depts;}else{return allDept;}}@Overridepublic Dept queryByNo(String deptno) {Dept dept = (Dept) redisTemplate.opsForHash().get("Dept", deptno);if (dept==null){Dept dept1 = deptMapper.queryByNo(deptno);redisTemplate.opsForHash().put("Dept", deptno, dept1);redisTemplate.expire("Dept", 5, TimeUnit.MINUTES);return dept1;}else{return dept;}}@Overridepublic List<User> queryByDeptNO(String deptno) {List<User> userByDeptNo = (List<User>) redisTemplate.opsForValue().get(deptno);if (userByDeptNo==null){List<User> users = deptMapper.queryByDeptNo(deptno);redisTemplate.opsForValue().set(deptno, users);redisTemplate.expire(deptno, 5, TimeUnit.MINUTES);return users;}else{return userByDeptNo;}}
}

5.3 UserServiceImpl

package com.igeek.service.Impl;import com.igeek.mapper.UserMapper;
import com.igeek.bean.User;
import com.igeek.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;import java.util.concurrent.TimeUnit;@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;private static RedisTemplate<String, Object> redisTemplate;public UserServiceImpl(RedisTemplate redisTemplate){this.redisTemplate=redisTemplate;}@Overridepublic User queryUser(String userid, String password) {return userMapper.queryUser(userid, password);}@Overridepublic User queryUserById(String userid) {User user = (User) redisTemplate.opsForHash().get("user", userid);if (user==null){User user1 = userMapper.queryUserById(userid);redisTemplate.opsForHash().put("user",userid,user1);redisTemplate.expire("user", 5, TimeUnit.MINUTES);return user1;}else {return user;}}@Overridepublic Integer updatePwd(String userid, String password) {return userMapper.updatePwd(userid, password);}
}

5.4 UserService

package com.igeek.service;
import com.igeek.bean.User;
public interface UserService {User queryUser(String userid, String password);User queryUserById(String userid);Integer updatePwd(String userid, String password);
}

6. util层

6.1 RedisCaCheTransfer

package com.igeek.util;
import com.igeek.cache.RedisCache;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;@Component
public class RedisCaCheTransfer {@Autowiredpublic void setRedisTemplate(RedisTemplate redisTemplate){RedisCache.setRedisTemplate(redisTemplate);}
}

6.2 DateConvertor

package com.igeek.util;
import org.springframework.core.convert.converter.Converter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class DateConvertor implements Converter<String, Date> {public Date convert(String s) {System.out.println("进入转换器");SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyy-MM-dd");try {return simpleDateFormat.parse(s);} catch (ParseException e) {e.printStackTrace();}return null;}
}

7. resources层

7.1 druid.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/nosql07?useSSL=false
jdbc.username=root
jdbc.password=xxx

7.2 log4j.properties

### 锟斤拷锟斤拷志锟斤拷息锟斤拷锟斤拷锟斤拷台 ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %m%n### 锟斤拷锟斤拷志锟斤拷息锟斤拷锟斤拷募锟斤拷锟絘ccp.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %l  %m%n### 锟斤拷锟斤拷锟斤拷锟饺硷拷锟斤拷锟皆硷拷锟斤拷锟皆?###
log4j.rootLogger=debug, stdout,file
###log4j.logger.s2jsp.sg.ch04.ArrayIndexExceptionLog4j=info,file

7.3 redis.properties

redis.hostName=localhost
redis.port=6379
redis.timeout=10000
redis.maxIdle=300
redis.maxTotal=1000
redis.maxWaitMillis=1000
redis.minEvictableIdleTimeMillis=300000
redis.numTestsPerEvictionRun=1024
redis.timeBetweenEvictionRunsMillis=30000
redis.testOnBorrow=true
redis.testWhileIdle=true

7.4 log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn">
<Appenders><Console name="Console" target="SYSTEM_OUT"><PatternLayout pattern="[%-5p] %d %c - %m%n" /></Console><File name="File" fileName="dist/my.log"><PatternLayout pattern="%m%n" /></File>
</Appenders><Loggers><Logger name="mh.sample2.Log4jTest2" level="INFO"><AppenderRef ref="File" /></Logger><Root level="INFO"><AppenderRef ref="Console" /></Root>
</Loggers>
</Configuration>

7.5 applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><import resource="applicationContext-mybatis.xml"/><import resource="applicationContext-redis.xml"/><import resource="applicationContext-tx.xml"/><import resource="applicationContext-service.xml"/><import resource="springmvc.xml"/>
</beans>

7.6 applicationContext-mybatis.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><context:property-placeholder ignore-unresolvable="true" location="classpath:config/druid.properties"/><!-- 开启注解扫描功能base-package:该包及子包下的所有类都会被扫描到--><context:component-scan base-package="com.igeek"/><!-- 1.数据源的配置,只能通过xml --><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close"><property name="driverClassName" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/><property name="maxActive" value="30"/><property name="initialSize" value="10"/><property name="maxWait" value="60000"/><property name="minIdle" value="5"/></bean><!-- 2.配置sqlSessionFactory单例的对象 --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 设置Mybatis核心配置文件的位置 --><!--<property name="configLocation" value="classpath:SqlMapConfig.xml"/>--><property name="configurationProperties"><props><!-- 全局映射器启用缓存 *主要将此属性设置完成即可--><prop key="cacheEnabled">true</prop><!-- 查询时,关闭关联对象即时加载以提高性能 --><prop key="lazyLoadingEnabled">false</prop><!-- 设置关联对象加载的形态,此处为按需加载字段(加载字段由SQL指 定),不会加载关联表的所有字段,以提高性能 --><prop key="aggressiveLazyLoading">true</prop></props></property><property name="typeAliasesPackage" value="com.igeek.bean"/><!-- 设置数据源属性 --><property name="dataSource" ref="dataSource"/></bean><!-- 第二种配置方式:只需要配置接口的包 --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.igeek.mapper"/></bean></beans>

7.7 applicationContext-redis.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!--ignore-unresolable设置为true时,配置文件找不到对应占位符值时,默认给${},如果false,找不到会直接报错,一般适用于单个xml中有多个配置文件--><context:property-placeholder ignore-unresolvable="true" location="classpath:config/redis.properties"/><!--2.redis连接池的配置--><bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig"><!--最大空闲数量--><property name="maxIdle" value="${redis.maxIdle}"/><!--连接池的最大连接数--><property name="maxTotal" value="${redis.maxTotal}"/><!--连接池的最大连接等待时间--><property name="maxWaitMillis" value="${redis.maxWaitMillis}"/><!--逐出连接的最小空闲时间 默认30分钟1800000毫秒--><property name="minEvictableIdleTimeMillis" value="${redis.minEvictableIdleTimeMillis}"/><!--是否从池中取连接时进行校验,如果校验失败,则去除连接,并尝试从另一个取--><property name="testOnBorrow" value="${redis.testOnBorrow}"/><!--在空闲时检查有效性,默认值false--><property name="testWhileIdle" value="${redis.testWhileIdle}"/></bean><!--3.配置jedis的连接工厂--><bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"><property name="poolConfig" ref="poolConfig"/><!--ip地址--><property name="hostName" value="${redis.hostName}"/><!--端口号--><property name="port" value="${redis.port}"/><!--redis如果有密码--><!--<property name="password" value="${redis.password}"/>--><!--客户端超时时间--><property name="timeout" value="${redis.timeout}"/></bean><!-- 4. redis操作模板,使用该对象可以操作redis  --><bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"><property name="connectionFactory" ref="connectionFactory"/><!--如果不配置Serializer,那么存储的时候缺省使用String,如果用User类型存储,那么会提示错误User can't cast to String!!  --><property name="keySerializer"><bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/></property><property name="valueSerializer"><bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer"/></property><property name="hashKeySerializer"><bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/></property><property name="hashValueSerializer"><bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer"/></property><!--开启事务  --><property name="enableTransactionSupport" value="true"/></bean>
</beans>

7.8 applicationContext-service.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"><!-- 配置service扫描 --><context:component-scan base-package="com.igeek.service" />
</beans>

7.9 applicationContext-tx.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:p="http://www.springframework.org/schema/p"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-4.2.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-4.2.xsdhttp://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd"><!-- 事务管理器 --><bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><!-- 数据源 --><property name="dataSource" ref="dataSource" /></bean><!-- 通知 --><tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><!-- 传播行为 --><tx:method name="save*" propagation="REQUIRED" /><tx:method name="insert*" propagation="REQUIRED" /><tx:method name="delete*" propagation="REQUIRED" /><tx:method name="update*" propagation="REQUIRED" /><tx:method name="find*" propagation="SUPPORTS" read-only="true" /><tx:method name="get*" propagation="SUPPORTS" read-only="true" /><tx:method name="query*" propagation="SUPPORTS" read-only="true" /></tx:attributes></tx:advice><!-- 切面 --><aop:config><aop:advisor advice-ref="txAdvice"pointcut="execution(* com.igeek.service.*.*(..))" /></aop:config></beans>

7.10 mybatis.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--settings:控制mybatis全局行为--><settings><!--设置mybatis输出日志--><setting name="logImpl" value="STDOUT_LOGGING"/></settings>
</configuration>

7.11 mybatis.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--settings:控制mybatis全局行为--><settings><!--设置mybatis输出日志--><setting name="logImpl" value="STDOUT_LOGGING"/></settings>
</configuration>

7.11 springmvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:task="http://www.springframework.org/schema/task"xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd"><!--controller的扫描--><context:component-scan base-package="com.igeek.controller"></context:component-scan><!--&lt;!&ndash;配置handlerMapping和handlerAdapter&ndash;&gt;--><!--<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>--><!--<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean>--><!--注解驱动方式启动取代上面的两个bean并且可以将结果以默认形式转换后返回客户端--><mvc:annotation-driven></mvc:annotation-driven><!--视图解析器--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/page/"></property><property name="suffix"  value=".jsp"></property></bean><mvc:default-servlet-handler/><!--声明自定义的转换器--><mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven><bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"><property name="converters"><set><bean class="com.igeek.util.DateConvertor"></bean></set></property></bean><!--上传解析器-->
<!--    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">-->
<!--        <property name="maxUploadSize" value="10487566"></property>-->
<!--    </bean>--><!--加载静态资源-->
<!--    <mvc:resources mapping="/**" location="/calendar"></mvc:resources>-->
<!--    <mvc:resources mapping="/**" location="/css"></mvc:resources>-->
<!--    <mvc:resources mapping="/**" location="/image"></mvc:resources>-->
<!--    <mvc:resources mapping="/**" location="/images"></mvc:resources>-->
<!--    <mvc:resources mapping="/**" location="/js"></mvc:resources>-->
<!--    <!--加载静态资源&ndash;&gt;--><mvc:resources mapping="/**" location="/../../../web/imge" /><mvc:resources mapping="/**" location="/../../../web/js" /><mvc:annotation-driven/></beans>

8. test 层

8.1 QueryAllDept

import com.igeek.mapper.DeptMapper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.List;@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:xml/applicationContext.xml")
public class QueryAllDept {@AutowiredDeptMapper mapper;@Testpublic void test1(){List AllDept= mapper.queryAllDept();System.out.println(AllDept);
//        User userAll= (User) mapper.queryAllUsers("4444");
//        ArrayList<String> arrayList= new ArrayList<String>((Collection<? extends String>) userAll);//        Jedis jedis=new Jedis("localhost", Integer.parseInt("6379"));
//        String user2=jedis.hget("userid","1001");
//        System.out.println(user2);}
}

8.2 QueryAllUserByDepno

import com.igeek.mapper.UserMapper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.ArrayList;@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:xml/applicationContext.xml")
public class QueryAllUserByDepno {@AutowiredUserMapper mapper;@Testpublic void test1(){ArrayList userAll= (ArrayList) mapper.queryAllUsersByDepno("4444");System.out.println(userAll);
//        User userAll= (User) mapper.queryAllUsers("4444");
//        ArrayList<String> arrayList= new ArrayList<String>((Collection<? extends String>) userAll);//        Jedis jedis=new Jedis("localhost", Integer.parseInt("6379"));
//        String user2=jedis.hget("userid","1001");
//        System.out.println(user2);}
}

8.3 QueryUserByUid

import com.igeek.bean.User;
import com.igeek.mapper.UserMapper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:xml/applicationContext.xml")
public class QueryUserByUid {@AutowiredUserMapper mapper;@Testpublic void test1(){//1、通过用户ID和密码查询User user=mapper.queryUser("1009","123300");System.out.println(user);//2、通过用户ID查询
//        User user=mapper.queryUserById("1009");
//        System.out.println(user);}
}

二、前端部分

  1. 404.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><meta charset="UTF-8"><title>404</title></head>
<%@ include file="top.jsp"%>
<body><ul><li/>
<p style="color: red;font-family:仿宋;font-size:30px;padding-left: 10px;position:relative;margin-top:70px;" ><strong>抱歉了,你还没有此操作权限 !</strong></p></ul>
<div style="margin:0 auto; height:306px;"><img src="../../imge/404.png" style="padding-left: 50px;width: 50%">
</div>
<div style="height: 3%">
</div>
<%@ include file="middle.jsp"%>
<%@ include file="foot.jsp"%>
</body>
</html>
  1. department.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.List" %>
<%@ page import="com.igeek.bean.Dept" %>
<%@ page import="com.igeek.bean.User" %>
<html>
<head><meta charset="UTF-8"><title>部门管理</title>
</head>
<body><%@ include file="top.jsp"%><%User user = new User();request.setCharacterEncoding("utf-8");if (request.getAttribute("user") != null) {user = (User) request.getAttribute("user");session.setAttribute("user", user);} else {user = (User) session.getAttribute("user");}
%>
<ul><li/><h3 style="padding-left: 10px">各部门展示</h3>
</ul><div class="container" style="overflow:auto;height: 55%;width: 40%">
<table border="1" cellpadding="15px" cellspacing="3px"><tr  align=center><th   colspan="3" >所有在库部门信息表</th></tr><tr align=center><td colspan="2">部门名称</td><td>备注</td></tr><%List<Dept> deptList = (List<Dept>) request.getAttribute("deptList");for (Dept dept : deptList) {%><tr align=center><td >一线部门:</td><td><a href="${pageContext.request.contextPath}/department.action?depno=<%=dept.getDepno()%>&userDepno=<%=user.getDepno()%>"><%=dept.getDepname()%></a></td><td>仅供本部门经理及员工查看!</td></tr><%}%>
</table></div>
<div><%@ include file="middle.jsp"%><!-- 尾部--><%@ include file="foot.jsp"%>
</div>
</body>
</html>
  1. foot.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><meta charset="UTF-8"><title>Foot Page</title></head>
<body><div style="background:yellowgreen;position:absolute;bottom:0;height: 40px;margin-top:-100px;width: 100%"><p align="center">联系我们:000000-5555555-55555 &nbsp; &nbsp;地点:镇江市丹徒区长晖路666<br/></p></div>
</body>
</html>
  1. login.jsp
<%--Created by IntelliJ IDEA.User: 水月Date: 2022/4/17Time: 23:24To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><head><meta charset="UTF-8"><title>欢迎访问</title><style type="text/css">body {background: url("../../imge/100.jpg") center;background-size: 120% auto;background-repeat: no-repeat;}#login-box {width: 30%;height: auto;margin: 0 auto;margin-top: 15%;text-align: center;background: #00000080;padding: 20px 50px;}#login-box h1 {color: white;}#login-box .form .item {color: white;margin-top: 15px;}#login-box .form .item input {width: 180px;font-size: 18px;border: 0;border-bottom: 3px solid white;padding: 5px 10px;background: #ffffff00;color: #ffffff;}#login-box .form .item input[placeholder] {color: white;}#login-box .form .item i {font-size: 18px;color: white;}#login-box button {border: 0;margin-top: 15px;width: 125px;height: 30px;font-size: 20px;font-weight: 700;color: white;background-image: linear-gradient(to right, #00dbde 0%, #fc00ff 100%);border-radius: 15px;}input::-webkit-input-placeholder {color:white;}input::-moz-placeholder {/* Mozilla Firefox 19+ */color: white;}input:-moz-placeholder {/* Mozilla Firefox 4 to 18 */color: white;}put-placeholder {/* Inteinput:-ms-inrnet Explorer 10-11 */color: white;}.login03:before {content: "\\2708";}.login02:before {content: "\\2764";}.login01 {display: inline-block;/*font: normal normal normal 14px/1 FontAwesome;*/font:normal normal 14px/1.2 '宋体','微软雅黑';font-size: inherit;color: white;text-rendering: auto;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;border: aqua;}</style></head>
<body>
<form action="${pageContext.request.contextPath}/Login.action" method="POST"><div id="login-box"><h1>部门员工管理系统</h1><div class="form"><div class="item"><i class="login01 login02" aria-hidden="true"></i><input type="text" placeholder="请输入用户ID" name="userid"></div><div class="item"><i class="login01 login03" aria-hidden="true"></i><input type="password" placeholder="请输入密码" name="password"></div></div><button type="submit">登录</button><button type="reset">重置</button></div><div style="color:black;text-align: center;"><br/><br/><b>感谢使用部门员工系统!</b><br><b>——20224NoSql期末考核</b></div>
</form>
</body></html>
  1. middle.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta charset="UTF-8"><title>middle</title></head>
<body><div style=" text-align:left; height: 135px"><ul><li/><p style="color: red;padding-left: 10px;position:relative;margin-top:25px;font-size:20px">温馨提示:</p></ul><p style="padding-left: 18px">1. 登录后可以查看所有部门的部门名称,查询的部门名称的缓存周期为10小时,缓存过期将重新查询并写入redis;<br />2. 登录人是某部门的经理,则可点击该部门名称查看该部门的所有员工姓名、薪水、入职时间;<br />3. 登录人某部门员工,则可点击该部门名称查看该部门的所有员工姓名和入职时间;<br />4. 登录人非本部门员工则无权查看该部门信息。所有查看的信息,都写入缓存,缓存周期为 5 分钟。<br /></p></div>
</body>
</html>
  1. modify.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="com.igeek.bean.User" %>
<html>
<head><meta charset="UTF-8"><title>更改密码</title></head>
<body>
<%@ include file="top.jsp"%>
<div style="height: 5%">
</div>
<div class="container">
<%User user= (User) session.getAttribute("user");
%><ul><li/><h3 style="padding-left: 10px">更改密码</h3></ul>
<div style="height: 2%">
</div>
<div style="border: 2px">
<form style="padding-left: 15px" action="${pageContext.request.contextPath}/update.action" method="post" >&nbsp;&nbsp;&nbsp;名:<input type="text" value="<%=user.getUsername()%>" readonly><br><input type="hidden" name="userid" value="<%=user.getUserid()%>">旧密码:<input type="password" name="oldpwd"><br>新密码:<input type="password" name="newpwd"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="submit" value="提交" style="padding-left: 10px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="reset" value="重置">
</form>
<div style="height: 5%">
</div><%@ include file="middle.jsp"%>
</div></div>
<div style="height: 17%">
</div>
<div><img src="../../imge/01.gif" alt="" height="70px" style="padding-left: 10px;position:relative;margin-top:35px;width: 50%">
</div>
<div><!-- 尾部--><%@ include file="foot.jsp"%>
</div>
</body>
</html>

8 top.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta charset="UTF-8"><title>管理系统 </title>
<%--<meta http-equiv="description" content="This is my page" />--%>
<%--<script type="text/javascript">--%>
<script type="text/javascript" src="<%=request.getContextPath()%>/js/time.js"></script>
</head>
<body>
<div><ul><li style="background: #cceeff; padding-left: 14px;position:absolute;top:0;width: 100%;height: 35px;margin-bottom: -100px">欢迎光临部门员工系统!今天是:<span id="clock" style="color:red"></span><script type="text/javascript">var clock = new Clock();clock.display(document.getElementById("clock"));</script></li></ul>
</div>
<div><img src="../../imge/01.gif" alt="" height="70px" style="padding-left: 10px;position:relative;margin-top:35px;width: 50%">
</div>
</body>
</html>
</body>
</html>

9 update.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><meta charset="UTF-8"><title>更新</title></head>
<body>
<%@ include file="top.jsp"%>
<div style="height: 5%">
</div>
<div class="container"><table bgcolor="#7fffd4" border="1" style="margin-top: 45px;height: 60px;padding-left: 1px;" cellpadding="32px" ><tr><td><p >恭喜你,密码更改成功</p></td></tr>
</table><div style="height: 5%"></div><%@ include file="middle.jsp"%><div style="height: 22%"></div><div><img src="../../imge/01.gif" alt="" height="70px" style="padding-left: 10px;position:relative;margin-top:35px;width: 50%"></div><div><!-- 尾部--><%@ include file="foot.jsp"%></div></div>
</body>
</html>

10 worker.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="com.igeek.bean.User" %>
<%@ page import="java.util.List" %>
<%@ page import="com.igeek.bean.Dept" %>
<%@ page import="java.text.SimpleDateFormat" %>
<html>
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<%@ include file="top.jsp"%>
<%User user= (User) session.getAttribute("user");Dept dept= (Dept) request.getAttribute("dept");List<User> userlist= (List<User>) request.getAttribute("depList");
%>
<ul><li/><h3 style="padding-left: 10px">本部门的所有在库成员</h3>
</ul>
<div class="container" style="overflow:auto;height: 55%;width: 40%"><table border="1" cellpadding="15px" cellspacing="3px"><tr  align=center><th   colspan="4" >部门成员信息表</th></tr>
<%--<table border:"1" style="padding-left: 10px">--%><tr align=center><td >姓名</td><%if (dept.getManagerid().equals(user.getUserid())){%><td >薪水</td><%}%><td >入职时间</td><td >备注</td></tr><%for (User user1 : userlist) {SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyy-MM-dd");String workdate = simpleDateFormat.format(user1.getWorkdate());%><tr align="center"><td><a href="${pageContext.request.contextPath}/modify.action?modifyUser=<%=user1.getUserid()%>&userid=<%=user.getUserid()%>"><%=user1.getUsername()%></a></td><%if (dept.getManagerid().equals(user.getUserid())){%><td><%=user1.getSalary()%></td><%}%><td><%=workdate%></td><td>员工本人可点击员工姓名来对登录密码进行修改 </td></tr><%}%>
</table>
</div>
<div><%@ include file="middle.jsp"%><!-- 尾部--><%@ include file="foot.jsp"%>
</div>
</body>
</html>

11 time.js

function Clock() {var date = new Date();this.year = date.getFullYear();this.month = date.getMonth() + 1;this.date = date.getDate();this.day = new Array("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六")[date.getDay()];this.hour = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();this.minute = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();this.second = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();this.toString = function() {return this.year + "年" + this.month + "月" + this.date + "日 "  + this.day;};this.toSimpleDate = function() {return this.year + "-" + this.month + "-" + this.date;};this.toDetailDate = function() {return this.year + "-" + this.month + "-" + this.date + " " + this.hour + ":" + this.minute + ":" + this.second;};this.display = function(ele) {var clock = new Clock();ele.innerHTML = clock.toString();window.setTimeout(function() {clock.display(ele);}, 1000);};
}

三、数据库设计

  1. Nosql07.sql
    (SQL语句转储导出)
SET FOREIGN_KEY_CHECKS=0;-- ----------------------------
-- Table structure for dep
-- ----------------------------
DROP TABLE IF EXISTS `dep`;
CREATE TABLE `dep` (`depno` varchar(5) NOT NULL,`depname` varchar(10) DEFAULT NULL,`depname` varchar(10) DEFAULT NULL,`managerid` varchar(20) DEFAULT NULL,PRIMARY KEY (`depno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of dep
-- ----------------------------
INSERT INTO `dep` VALUES ('1111', '销售部', '1006');
INSERT INTO `dep` VALUES ('2222', '技术部', '1007');
INSERT INTO `dep` VALUES ('3333', '售后部', '1008');
INSERT INTO `dep` VALUES ('4444', '运输部', '1009');
INSERT INTO `dep` VALUES ('5555', '策划部', '1005');
INSERT INTO `dep` VALUES ('6666', '维修部', '1004');
INSERT INTO `dep` VALUES ('7777', '顾问部', '1003');
INSERT INTO `dep` VALUES ('8888', '监察部', '1002');-- ----------------------------
-- Table structure for emp
-- ----------------------------
DROP TABLE IF EXISTS `emp`;
CREATE TABLE `emp` (`userid` varchar(20) NOT NULL,`username` varchar(20) NOT NULL,`password` varchar(20) NOT NULL,`salary` double DEFAULT NULL,`depno` varchar(5) DEFAULT NULL,`workdate` date DEFAULT NULL,PRIMARY KEY (`userid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of emp
-- ----------------------------
INSERT INTO `emp` VALUES ('1001', '张安', '123202', '5000', '1111', '2021-10-01');
INSERT INTO `emp` VALUES ('1002', '李素', '123022', '6000', '8888', '2021-07-01');
INSERT INTO `emp` VALUES ('1003', '吴局', '123698', '7000', '7777', '2020-10-01');
INSERT INTO `emp` VALUES ('1004', '刘六', '123852', '8000', '6666', '2020-12-01');
INSERT INTO `emp` VALUES ('1005', '刘七', '123630', '5200', '5555', '2021-09-01');
INSERT INTO `emp` VALUES ('1006', '刘强东', '123789', '7200', '1111', '2021-01-01');
INSERT INTO `emp` VALUES ('1007', '马化腾', '123678', '8100', '2222', '2020-10-26');
INSERT INTO `emp` VALUES ('1008', '马云', '123123', '7838', '3333', '2019-07-24');
INSERT INTO `emp` VALUES ('1009', '章泽天', '123025', '8838', '4444', '2020-06-19');
INSERT INTO `emp` VALUES ('1010', '张一鸣', '123321', '5957', '5555', '2019-06-14');
INSERT INTO `emp` VALUES ('1011', '张磊', '123632', '6936', '6666', '2019-07-26');
INSERT INTO `emp` VALUES ('1012', '任正非', '123963', '9926', '5555', '2012-04-06');
INSERT INTO `emp` VALUES ('1013', '孟晚舟', '123888', '7878', '4444', '2013-02-14');
INSERT INTO `emp` VALUES ('1014', '刘亦菲', '123444', '5858', '6666', '2009-11-27');
INSERT INTO `emp` VALUES ('1015', '董明珠', '123333', '5656', '4444', '2008-06-14');
INSERT INTO `emp` VALUES ('1016', '王力宏', '123222', '8484', '4444', '2011-10-22');
INSERT INTO `emp` VALUES ('1017', '黄渤', '123555', '5652', '6666', '2014-10-20');
INSERT INTO `emp` VALUES ('1018', '董卿', '123666', '5963', '4444', '2015-11-26');
INSERT INTO `emp` VALUES ('1019', '彭于晏', '123777', '8522', '7777', '2009-12-01');
INSERT INTO `emp` VALUES ('1020', '章子怡', '123999', '5757', '8888', '2005-07-13');
INSERT INTO `emp` VALUES ('1021', '任平', '123111', '6985', '2222', '2020-06-24');
INSERT INTO `emp` VALUES ('1022', '马龙', '123000', '8565', '4444', '2020-05-12');
INSERT INTO `emp` VALUES ('1023', '赵丽颖', '123201', '4896', '4444', '2019-06-19');
INSERT INTO `emp` VALUES ('1024', '薛之谦', '123025', '6985', '1111', '2019-02-04');
INSERT INTO `emp` VALUES ('1025', '鞠婧祎', '123211', '8088', '2222', '2019-02-28');
INSERT INTO `emp` VALUES ('1026', '杨钰莹', '123985', '7887', '3333', '2010-02-09');
INSERT INTO `emp` VALUES ('1027', '田馥郁', '123321', '8000', '7777', '2020-02-06');
INSERT INTO `emp` VALUES ('1028', '张杰', '123000', '7418', '8888', '2021-02-02');
INSERT INTO `emp` VALUES ('1029', '梅花', '123333', '6868', '4444', '2018-02-14');
INSERT INTO `emp` VALUES ('1030', '许嵩', '123668', '8118', '4444', '2018-06-15');

四、相关截图

  1. 登录页面
    Nosql与Redis期末考核项目回顾
  2. 部门经理登录

Nosql与Redis期末考核项目回顾

2.1 查看所有部门的部门名称

Nosql与Redis期末考核项目回顾

2.2 查看部门的所有员工姓名、薪水、入职时间

Nosql与Redis期末考核项目回顾

2.3 更改密码

Nosql与Redis期末考核项目回顾

Nosql与Redis期末考核项目回顾

  1. 部门员工登录
    Nosql与Redis期末考核项目回顾

3.1 查看所有部门的部门名称

Nosql与Redis期末考核项目回顾

3.2 查看该部门的所有员工姓名和入职时间

Nosql与Redis期末考核项目回顾

3.3 更改密码

Nosql与Redis期末考核项目回顾

Nosql与Redis期末考核项目回顾

  1. 提示信息
    Nosql与Redis期末考核项目回顾

  2. 信息周期缓存
    Nosql与Redis期末考核项目回顾

  3. 数据查询Test
    6.1 数据库内所有部门的部门编号、部门名称、经理编号

Nosql与Redis期末考核项目回顾

6.2 查询某一员工信息

Nosql与Redis期末考核项目回顾
6.3 查询某一部门所有员工信息

Nosql与Redis期末考核项目回顾
7. 数据库信息

Nosql与Redis期末考核项目回顾

Nosql与Redis期末考核项目回顾