1. @slf4j 别名"酸辣粉",哈哈,言归正传。@Slf4j是用作日志输出的,一般会在项目每个类的开头加入该注解,如果不写下面这段代码,并且想用log
private final Logger logger = LoggerFactory.getLogger(当前类名.class);
那么就可以使用@slf4j。
2.放在resource下的静态资源没有config包是访问不到的。
3. @Configuration 说明配置类。
4. addResourceHandlers 设置静态资源映射,可以访问resource下的index.html。
5.
function loginApi(data) {
return $axios({
'url': '/employee/login',
'method': 'post',
data
})
这里是login.js文件 用axios阿贾克斯技术向后端发送请求。
6. map-underscore-to-camel-case: true
在映射实体或者属性时,将数据库中表名和字段名中的下划线去掉,按照驼峰命名法映射
7.R.java 通用返回结果,服务端响应的数据最终都会封装成此对象。
8.
public static <T> R<T> success(T object) {
R<T> r = new R<T>();
r.data = object;
r.code = 1; //登录成功,返回1,并且返回数据
return r;
}
public static <T> R<T> error(String msg) {
R r = new R();
r.msg = msg;
r.code = 0;//登录失败,返回0,并且返回错误信息
return r;
}
9. @RequestBody 作用在形参列表上,用于将前台发送过来固定格式的数据【xml 格式或者 json等】封装为对应的 JavaBean 对象。
10. queryWrapper.eq(Employee::getUsername,employee.getUsername());
相当于创建一个Employee对象并调用getUsername方法。
11. Employee emp = employeeService.getOne(queryWrapper);
因为数据库username 索引类型是Unique 用getOne方法查出来唯一的一个数据。
12. Session 存储特定用户会话所需的属性及配置信息。
13. @mapper的作用是可以给mapper接口自动生成一个实现类,让spring对mapper接口的bean进行管理,并且可以省略去写复杂的xml文件。
14.
@Slf4j
@SpringBootApplication
@ServletComponentScan
public class ReggieApplication {
public static void main(String[] args) {
SpringApplication.run(ReggieApplication.class,args);
log.info("项目启动成功...");
}
}
加入@ServletComponentScan 才会扫描 LoginCheckFilter.java 文件下的
@WebFilter(filterName = "loginCheckFilter",urlPatterns = "/*") 的注解
15.filter过滤器(或拦截器)的作用是 过滤出请求地址。
16. 路径匹配器,支持通配符
public static final AntPathMatcher PATH_MATCHER = new AntPathMatcher();"/backend/**"
17. json数据是是一种轻量级的数据交换格式,它基于一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。
18.log.info() 打印日志。
19. @ControllerAdvice(annotations = {RestController.class, Controller.class})
拦截带有@RestController @Controller 注解的类。
20.@ResponseBody//封装成json数据再返回。
21.@Slf4j 打印日志输出。
22. @ExceptionHandler(SQLIntegrityConstraintViolationException.class)
处理哪些异常。
23.json数据格式:{“name”:“张晓明”,“phone”:“13812344321”}。
24.vue 创建完对象之后,自动调用created()里面的方法。
25.页面发送ajax请求,将页面查询参数(page、pageSize、name)提交到服务端。
26.@getMapping 前端控制器中,发送的请求是get方式,后端就用@getmapping 接收。
27.//构造条件构造器
LambdaQueryWrapper<Employee> queryWrapper = new LambdaQueryWrapper();
这里用LambadaQueryWrapper的好处就是写条件匹配的时候不需要写字段名,否则后期维护时如果发生了数据库变化,表的字段名变更情况时还得来这里改
28. //添加过滤条件
queryWrapper.like(StringUtils.isNotEmpty(name),Employee::getName,name);
Employee::getName,name 调用Employee里面的getName方法,并传入name。
29.//添加排序条件
queryWrapper.orderByDesc(); Desc排序降序 , asc升序排序。
30.
@Slf4j
@RestController
@RequestMapping("/employee")
public class EmployeeController {
@Autowired
private EmployeeService employeeService;
开头的@RequestMapping("/employee") 添加过了 ("/employee")
底下的@PostMapping 就不用添加 ("/employee")
31. Session 保存每个用户的专用信息
32.
@PostMapping
public R<String> update(HttpServletRequest request,@RequestBody Employee employee) {
log.info(employee.toString());
Long empId = (Long)request.getSession().getAttribute("employee");
employee.setUpdateTime(LocalDateTime.now());
employee.setUpdateUser(empId);
employeeService.updateById(employee);
return R.success("员工信息修改成功");
}
HttpServletRequest 接口继承自 ServletRequest 接口,其主要作用是封装 HTTP 请求消息。由于 HTTP 请求消息分为请求行、请求消息头和请求消息体三部分。因此,在 HttpServletRequest 接口中定义了获取请求行、请求头和请求消息体的相关方法。
33. 错误信息:discard long time none received connection.
Js对long型数据进行处理时丢失精度,导致提交的id和数据库的Id不一致。
34.在WebMvcConfig配置类中扩展Spring mvc 的消息转换器,在此消息转换器中使用提供的对象转换器进行java对象到json数据的转换。
35.
package com.itheima.reggie.config;
@Slf4j
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
log.info("开始进行静态资源映射...");
registry.addResourceHandler("/backend/**").addResourceLocations("classpath:/backend/");
registry.addResourceHandler("/front/**").addResourceLocations("classpath:/front/");
}
为了调用resource下的静态资源,因resource底下的静态资源不自动加载。
/**
* 扩展mvc框架的消息转换器
* @param converters
*/
@Override
protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
//创建消息转换器对象
MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
//设置对象转换器,底层使用Jackson将java对象转换为json
super.extendMessageConverters(converters);
//将上面的消息转换器对象追加到mvc框架的转换器集合中
converters.add(0,messageConverter);//为了把添加的转换器放在首位,所以索引设置为0.
}
}
配置消息转换器,因为json格式会使long精度丢失。
36.
package com.itheima.reggie.common;
@Data
public class R<T> {
private Integer code; //编码:1成功,0和其它数字为失败
private String msg; //错误信息
private T data; //数据
private Map map = new HashMap(); //动态数据
public static <T> R<T> success(T object) {
R<T> r = new R<T>();
r.data = object;
r.code = 1; //执行成功,返回1,并且返回数据
return r;
}
public static <T> R<T> error(String msg) {
R r = new R();
r.msg = msg;
r.code = 0; //执行失败,返回0,并且返回错误信息
return r;
}
public R<T> add(String key, Object value) {
this.map.put(key, value);
return this;
}
}