为什么要使用DTO,而不是直接使用实体类?
为了精确封装,只携带自己需要的属性,避免数据泄露。
如果是json数据,在接收时,函数括号里要添加@RequestBody 注解
// 对象属性拷贝,节省代码。必须属性名一致。
BeanUtils.copyProperties(employeeDTO,employee);
怎么样在写代码时自动提示数据库内容? 首先在idea连接mysql数据库,
然后按照截图操作。
新增员工时怎么获得当前用户的信息?
拦截器时保存到threadlocal,需要时提取。
ThreadLocal
接口开发流程:
拿到前端请求地址,根据前端传输的数据来决定怎么接受,调用service层完成业务。
新增员工
接口分析
- 请求路径:/admin/employee
- 请求方式: POST
- 传入数据: EmployeeDTO
- 写入数据: Employee
左边是Employee,右边是DTO。需要在service层进行数据的封装,最后把数据存入数据库。
代码实现
EmployeeController.java
@ApiOperation(value = "员工新建")
@PostMapping
public Result save(@RequestBody EmployeeDTO employeeDTO){
employeeService.save(employeeDTO);
return Result.success();
}
EmployeeService.java
void save(EmployeeDTO employeeDTO);
EmployeeServiceImpl.java
@Override
public void save(EmployeeDTO employeeDTO){
Employee employee = new Employee();
// 对象属性拷贝,节省代码。必须属性名一致。
BeanUtils.copyProperties(employeeDTO,employee);
// 设置账号状态,默认正常。使用常量避免硬编码。
employee.setStatus(StatusConstant.ENABLE);
// 设置密码,默认密码123456
employee.setPassword(DigestUtils.md5DigestAsHex(PasswordConstant.DEFAULT_PASSWORD.getBytes()));
//属性封装好,存入数据库
employeeMapper.insert(employee);
}
EmployeeMapper.java
@AutoFill(value = OperationType.INSERT)
void insert(Employee employee);
EmployeeMapper.xml
<insert id="insert">
insert into employee(name, username, password, phone, sex, id_number,
create_time,update_time, create_user, update_user,status)
values (#{name},#{username},#{password},#{phone},#{sex},#{idNumber},
#{createTime},#{updateTime},#{createUser},#{updateUser},#{status})
</insert>
员工登录
员工注销
员工分页查询
接口分析
- 请求路径:/admin/employee/page
- 请求方式: GET
- 传入数据: EmployeePageQueryDTO
- 返回数据: PageResult
代码实现
EmployeeController.java
@ApiOperation(value = "员工分页查询")
@GetMapping("/page")
public Result<PageResult> page(EmployeePageQueryDTO employeePageQueryDTO) {
log.info("员工分页查询",employeePageQueryDTO);
PageResult result = employeeService.pageQuery(employeePageQueryDTO);
return Result.success(result);
}
EmployeeService.java
PageResult pageQuery(EmployeePageQueryDTO employeePageQueryDTO);
EmployeeServiceImpl.java
@Override
public PageResult pageQuery(EmployeePageQueryDTO employeePageQueryDTO) {
// 使用pagehelper,这里插件直接可以划定了页码和条数,在mappper层只查询名称
PageHelper.startPage(employeePageQueryDTO.getPage(),employeePageQueryDTO.getPageSize());
Page<Employee> page = employeeMapper.pageQuery(employeePageQueryDTO);
long total = page.getTotal();
List<Employee> records = page.getResult();
return new PageResult(total,records);
}
EmployeeMapper.java
Page<Employee> pageQuery(EmployeePageQueryDTO employeePageQueryDTO);
EmployeeMapper.xml
<select id="pageQuery" resultType="com.sky.entity.Employee">
select * from employee
<where>
<if test="name!=null and name!=''">
and name like concat('%',#{name},'%')
</if>
</where>
order by create_time desc
</select>
员工停用
接口分析
- 请求路径:/admin/employee/status/{status}
- 请求方式: POST
- 传入数据: EmployeePageQueryDTO
- 返回数据: PageResult
这里发送的请求是/admin/employee/status/1?id=3,为什么只写{status}
代码实现
EmployeeController.java
@ApiOperation(value = "员工停用")
@PostMapping("/status/{status}")
public Result startOrStop(@PathVariable Integer status, Long id){
log.info("启用禁用员工账号,{},{}",status,id);
employeeService.startOrStop(status,id);
return Result.success();
}
EmployeeService.java
void startOrStop(Integer status, Long id);
EmployeeServiceImpl.java
@Override
public void startOrStop(Integer status, Long id) {
Employee employee = Employee.builder().status(status).id(id).build();
employeeMapper.update(employee);
}
EmployeeMapper.java
@AutoFill(value = OperationType.UPDATE)
void update(Employee employee);
EmployeeMapper.xml
<!-- 修改用户-->
<update id="update" parameterType="Employee">
update employee
<set>
<if test="name!=null"> name = #{name}, </if>
<if test="password!=null"> password = #{password}, </if>
<if test="username!=null"> username = #{username}, </if>
<if test="phone!=null"> phone = #{phone}, </if>
<if test="sex!=null"> sex = #{sex}, </if>
<if test="idNumber!=null"> id_Number = #{idNumber}, </if>
<if test="updateTime!=null"> update_Time = #{updateTime}, </if>
<if test="updateUser!=null"> update_User = #{updateUser}, </if>
<if test="status!=null"> status = #{status}, </if>
</set>
where id = #{id}
</update>