package com.dnui.reggie.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 员工实体类
*/
@Data
public class Employee implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private String username;
private String name;
private String password;
private String phone;
private String sex;
private String idNumber;//驼峰命名,环境搭建时候已经把id_number变成idNumber
private Integer status;
private LocalDateTime createTime;//驼峰命名,环境搭建时候已经把id_number变成idNumber
private LocalDateTime updateTime;//驼峰命名,环境搭建时候已经把id_number变成idNumber
@TableField(fill = FieldFill.INSERT)
private Long createUser;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Long updateUser;
}
假设我们现在有一个实体类员工表,想通过这张表实现校验用户名和密码功能。
在controller中我们应该这样操作:
首先,为了安全起见应该先把得到的密码进行加密:
String password = employee.getPassword();
password = DigestUtils.md5DigestAsHex(password.getBytes());
用MyBatis中的LambdaQueryWrapper方法进行查询操作:
LambdaQueryWrapper<Employee> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Employee::getUsername, employee.getUsername());
Employee emp = employeeService.getOne(queryWrapper);
其中username在数据库中已设置唯一性约束。
其中queryWrapper.eq 等同于着select * from student where name = '(employee.getUsername)';
第一次在项目中遇到方法引用,这里记录一下,一般通过类名调用,这里直接调用了Employee实体类中的getUsername字段,把employee.getUsername传到这个字段(实体类字段相当于参数,后面的相当于值)。
Employee emp = employeeService.getOne(queryWrapper);
getOne(),这个是方法返回结果不止一条则会抛出异常,如果想默认取第一条结果,可以给这方法传第二个参数为false。
//如果没有查到
if (emp == null) {
return R.error("登录失败");
}
//密码比对
if (emp.getPassword().equals(password)) {
R.error("登录失败");
}
//密码比对成功,查询员工状态
if (emp.getStatus() == 0) {
R.error("该员工已被禁用");
}
登录成功,将id放到session中
request.getSession().setAttribute("employee", emp.getId());
最后返回通用结果为success