新增
Constant
package com.itheima.reggie.common;
//常量
public interface Constant {
//session中常量标识
String SESSION_EMPLOYEE = “session_employee”;
//默认初始密码
String INIT_PASSWORD = “123456”;
String SESSION_USER = "session_user";
//用户手机验证按
String USER_PHONE_CODE = "phone:";
}
ResultInfo
//通用返回结果,服务端响应的数据最终都会封装成此对象
@Data
public class ResultInfo implements Serializable {
private Integer code; //编码:1成功,0和其它数字为失败
private String msg; //错误信息
private Object data; //数据
//成功结果
public static ResultInfo success(Object object) {
ResultInfo resultInfo = new ResultInfo();
resultInfo.data = object;
resultInfo.code = 1;
return resultInfo;
}
//失败结果
public static ResultInfo error(String msg) {
ResultInfo resultInfo = new ResultInfo();
resultInfo.msg = msg;
resultInfo.code = 0;
return resultInfo;
}
}
EmployeeController
@RestController
public class EmployeeController {
@Autowired
private EmployeeService employeeService;
@Autowired
HttpSession httpSession;
//新增
@PostMapping(“/employee”)
public ResultInfo add(@RequestBody Employee employee){
//调用service
employeeService.add(employee);
//返回结果
return ResultInfo.success(null);
/* System.out.println(employee);
return null;*/
}
}
EmployeeService
public interface EmployeeService{
void add(Employee employee);
}
EmployeeServiceImpl
@Autowired
private EmployeeMapper employeeMapper;
EmployeeServiceImpl
@Transactional
@Service
public class EmployeeServiceImpl implements EmployeeService {
@Autowired
private EmployeeMapper employeeMapper;
//新增
@Override
public void add(Employee employee) {
// 1.补齐参数
// 1-1 id 雪花算法ID生成器:保证id不重复 //id字段手动设置自增(保证唯一) 这里id为bigInt所以要写3L
Long id = IdUtil.getSnowflake(1, 1).nextId();
employee.setId(id);
// 1-2 密码 md5加密
String password = SecureUtil.md5(Constant.INIT_PASSWORD);
employee.setPassword(password);//设置初始密码为123456
// 1-3 员工状态
employee.setStatus(1);
// 创建时间
employee.setCreateTime(new Date());
// 创建人
employee.setUpdateTime(new Date());
employee.setCreateUser(1L);
employee.setUpdateUser(1L);
// 2.调用mapper新增
employeeMapper.insert(employee);
}
}
id精度丢失解决方法(数据类型为bigint时,运用雪花算法会出现此问题)
新建工具类JacksonObjectMapper
package com.itheima.reggie.common;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.DateSerializer;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import java.math.BigInteger;
import java.text.SimpleDateFormat;
import java.util.Date;
import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES;
/**
-
对象映射器:基于jackson将Java对象转为json,或者将json转为Java对象
-
将JSON解析为Java对象的过程称为 [从JSON反序列化Java对象]
-
从Java对象生成JSON的过程称为 [序列化Java对象到JSON]
*/
public class JacksonObjectMapper extends ObjectMapper {public static final String DEFAULT_DATE_FORMAT = “yyyy-MM-dd”;
public static final String DEFAULT_DATE_TIME_FORMAT = “yyyy-MM-dd HH:mm:ss”;
public static final String DEFAULT_TIME_FORMAT = “HH:mm:ss”;public JacksonObjectMapper() {
super();
//收到未知属性时不报异常
this.configure(FAIL_ON_UNKNOWN_PROPERTIES, false);//反序列化时,属性不存在的兼容处理 this.getDeserializationConfig().withoutFeatures(FAIL_ON_UNKNOWN_PROPERTIES); //自定义转换规则 SimpleModule simpleModule = new SimpleModule() .addSerializer(BigInteger.class, ToStringSerializer.instance)//将BigInteger转换为String .addSerializer(Long.class, ToStringSerializer.instance)//将Long转换成String .addSerializer(Date.class, new DateSerializer(false, new SimpleDateFormat(DEFAULT_DATE_FORMAT))); // 将Date转为指定格式字符串 this.registerModule(simpleModule);
}
}
WebMvcConfig
package com.itheima.reggie.config;
import com.itheima.reggie.common.JacksonObjectMapper;
import com.itheima.reggie.interceptor.LoginCheckInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.List;
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//
registry.addResourceHandler(“/backend/**”).addResourceLocations(“classpath:/backend/”);
}
//登录拦截
@Autowired
private LoginCheckInterceptor loginCheckInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loginCheckInterceptor).addPathPatterns("/**")
.excludePathPatterns("/backend/**")
.excludePathPatterns("/employee/login")
.excludePathPatterns("/employee/logout");
}
//消息转换器配置
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
//创建消息转换器对象
MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
//设置对象转换器,底层使用Jackson将Java对象转为json
messageConverter.setObjectMapper(new JacksonObjectMapper());
//将上面的消息转换器对象追加到mvc框架的转换器集合中
converters.add(0, messageConverter);
}
}
修改
EmployeeController
@RestController
public class EmployeeController {
@Autowired
private EmployeeService employeeService;
@Autowired
HttpSession httpSession;
//修改员工
@PutMapping(“/employee”)
public ResultInfo update(@RequestBody Employee employee){
//1.接收参数
//2.调用service修改
employeeService.update(employee);
//3.返回结果
return ResultInfo.success(null);
/System.out.println(employee);
return null;/
}
}
EmployeeService
public interface EmployeeService{
void update(Employee employee);
}
EmployeeServiceImpl
@Transactional
@Service
public class EmployeeServiceImpl implements EmployeeService {
@Autowired
private EmployeeMapper employeeMapper;
//修改员工
@Override
public void update(Employee employee) {
//1.补齐参数
employee.setUpdateTime(new Date());
employee.setUpdateUser(1L);//暂时写死1L
//2.调用mapper
employeeMapper.updateById(employee);
}
}