文章目录
期末考核要求
在 MySQL 中创建数据表 emp、dep 表。
emp 表存储员工信息,包含编号、姓名、密码、薪水、所在部门编号、入职时间
dep 表存储部门信息,包含部门编号、部门名称、经理编号
编写 Java 服务器程序实现以下功能:
- 用户通过员工编号和密码进行登录
- 登录后可以查看所有部门的部门名称,查询的部门名称使用 redis 进行缓存,缓存周期为 10 小时,缓存过期将重新查询并写入 redis
- 点击部门名称可以查看该部门的人员信息:如果登录人是该部门的经理,则可以查看该
部门的所有员工姓名、薪水、入职时间;如果登录人本部门员工,则可以查看该部门的所有
员工姓名和入职时间;如果登录人非本部门员工则提示信息无权查看。 所有查看的信息
都写入缓存,缓存周期为 5 分钟 - 点击员工姓名,如果登录人是员工本人,则可以对登录密码进行修改,否则提示错误信息
一、后端代码部分
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 {
@Autowired
private DeptService deptService;
@Autowired
private 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";
}else
return "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 {
@Autowired
private UserService userService;
@Autowired
private 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;
}
@Override
public 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;
}
@Override
public 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中管理的redisTamplate
private static RedisTemplate<String, Object> redisTemplate;
private final String id;
private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
@Override
public 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;
}
@Override
public String getId() {
return this.id;
}
@Override
public 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();
}
}
@Override
public 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;
}
@Override
public 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;
}
@Override
public void clear() {
Long size=redisTemplate.execute(new RedisCallback<Long>() {
@Override
public Long doInRedis(RedisConnection redisConnection) throws DataAccessException {
Long size = redisConnection.dbSize();
redisConnection.flushDb();
redisConnection.flushAll();
return size;
}
});
logger.info("------------------clear清除了"+size+"个对象");
}
@Override
public int getSize() {
Long size=redisTemplate.execute(new RedisCallback<Long>() {
@Override
public 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 mapper
PUBLIC "-//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 mapper
PUBLIC "-//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 emp
where userid=#{userid}
</select>
<select id="queryAllUsersByDepno" resultType="com.igeek.bean.User">
SELECT *
FROM emp
where 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;
@Autowired
private DeptMapper deptMapper;
public DeptServiceImpl(RedisTemplate redisTemplate){
this.redisTemplate=redisTemplate;
}
@Override
public 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;
}
}
@Override
public 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;
}
}
@Override
public 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 {
@Autowired
private UserMapper userMapper;
private static RedisTemplate<String, Object> redisTemplate;
public UserServiceImpl(RedisTemplate redisTemplate){
this.redisTemplate=redisTemplate;
}
@Override
public User queryUser(String userid, String password) {
return userMapper.queryUser(userid, password);
}
@Override
public 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;
}
}
@Override
public 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 {
@Autowired
public 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/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://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/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://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.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
http://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 configuration
PUBLIC "-//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 configuration
PUBLIC "-//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.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
http://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>
<!--<!–配置handlerMapping和handlerAdapter–>-->
<!--<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>-->
<!-- <!--加载静态资源–>-->
<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 {
@Autowired
DeptMapper mapper;
@Test
public 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 {
@Autowired
UserMapper mapper;
@Test
public 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 {
@Autowired
UserMapper mapper;
@Test
public 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);
}
}
二、前端部分
- 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>
- 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>
- 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 地点:镇江市丹徒区长晖路666号<br/></p>
</div>
</body>
</html>
- login.jsp
<%--
Created by IntelliJ IDEA.
User: 水月
Date: 2022/4/17
Time: 23:24
To 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 {
/* Inte
input:-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>——2022年4月NoSql期末考核</b>
</div>
</form>
</body>
</html>
- 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>
- 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" >
姓 名:<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>
<input type="submit" value="提交" style="padding-left: 10px;">
<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);
};
}
三、数据库设计
- 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');
四、相关截图
- 登录页面
- 部门经理登录
2.1 查看所有部门的部门名称
2.2 查看部门的所有员工姓名、薪水、入职时间
2.3 更改密码
- 部门员工登录
3.1 查看所有部门的部门名称
3.2 查看该部门的所有员工姓名和入职时间
3.3 更改密码
-
提示信息
-
信息周期缓存
-
数据查询Test
6.1 数据库内所有部门的部门编号、部门名称、经理编号
6.2 查询某一员工信息
6.3 查询某一部门所有员工信息
7. 数据库信息