为了学习方便,苍穹外卖的前后端代码已放至git开源。
源代码-->sky-take-out: 苍穹外卖
添加员工表单分析,添加的表单账号、手机号、身份证都是码唯一的,写后端代码时需要校验。登录之后密码为初始密码123456,登录之后自行修改密码。数据提交格式为json,根据/admin和/user来判断请求是谁发出的,employee员工表,字段根据自身需要设置
如果前端提交的数据和实体类对应的属性相差较大,建议使用DTO来封装数据使用。功能和实体类是一样的,只是DTO封装的属性表少了。
项目的mvc模式,前端传数据过来,走哪里会有一个路径,而这个路径在项目中的control层,走到control层,这一层又会去调service层(主要写业务逻辑),service调mapper层,mapper(写sql)调数据库获取数据。
/*
* 新增员工
* 响应的数据是json,所以需要加注解@RequestBody
* */
@PostMapping
@ApiOperation("新增员工")
public Result save(@RequestBody EmployeeDTO employeeDTO){
log.info("新增员工:{}",employeeDTO);
employeeService.save(employeeDTO);
return Result.success();
}
cotronl层调employeeService接口的save方法,save方法需要它的实现类去实现具体操作
/**
* 新增员工
* @param
* @return
*/
void save(EmployeeDTO employeeDTO);
/**
* 新增员工
* @param
* @return
*/
@Override
public void save(EmployeeDTO employeeDTO) {
Employee employee = new Employee();
//employee.setName(employeeDTO.getName());
// 对象属性拷贝简化代码BeanUtils.copyProperties(employeeDTO,employee);从左往右拷
BeanUtils.copyProperties(employeeDTO,employee);
//设置账号的状态,默认状态1:正常,0:预定
employee.setStatus(StatusConstant.ENABLE);
//设置密码,默认:123456,设置成md5加密
employee.setPassword(DigestUtils.md5DigestAsHex(PasswordConstant.DEFAULT_PASSWORD.getBytes()));
//设置当前记录的创建时间和修改时间
employee.setCreateTime(LocalDateTime.now());
employee.setUpdateTime(LocalDateTime.now());
//设置当前创建人和修改人ID,先写死,后期通过技术实现
employee.setCreateUser(10l);
employee.setUpdateUser(10l);
employeeMapper.insert(employee);
}
实现类主要封装了前端传过来的数据,前端传的数据属性和数据库表对应,前端没有的数据通过set去设置之。
/**
* 插入员工
* @param
*
* @return
*/
@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})"
)
void insert(Employee employee);
这里可以通过注解写sql也可以通过xml配置sql
TrheadLocal为每个线程提供一份单独的空间,具有线程的隔离效果,只有在线程内才能获取到对应的值,线程外不能访问。前端的每一次请求都是一次线程访问,线程贯穿用到接口,TrheadLocal三个主要方法:setCurrentId、getCurrentId、removeCurrentId。
问题:如何在service层获取操作者的id?
答:可在过滤器jwttoken中set,当线程走到service层时get即可获取,如下图:
首先看需求分析,在接口管理上可以看到需要传上面参数,响应什么参数。
接口网址:YApi Pro-高效、易用、功能强大的可视化接口管理平台
代码直接荡项目看。。
这里时间格式不对,可以通过注解和配置springmvc消息转换器的解决,注解只是局部的,而配置消息转换器是全局的。注解直接在属性头上加上时间格式即可,如下图:
配置需要到配置类下,知识点请看注释,基础不好这里也还不是很明白。