完成员工管理和分类管理两个模块
数据库设计
要将实体类的各种属性规定好,一般正常的实体数据要包括id,状态,创建时间、更新时间、创建人、修改人(这四个值可以为null),如果有唯一值的属性,就要设置索引(类型为unique)
创建时间用LocalTime(datetime)数据类型,id用Long(BigInt)类型
代码规范
/**加回车在函数头顶,书写注释,基本每一行都要注释
接口文档补充
controller的方法用@APIOperation注解
SQL提示
用右侧database导入数据库,然后右键SQL语句,showContextAction然后injectLanguage选择MySQL
mybatis驼峰命名
是指数据库的字段_能对应上实体类的属性名
新异常捕获
出现了用户名重复的异常,于是建立新的方法(加上ExceptionHandler注解)捕获异常,返回信息,打印日志
获取更改者/创建者id
这里现讲的是用ThreadLocal获取,这个类能自动获取当前线程的数据,用于共享同一个线程的数据。通过这个类的get和set方法就能灵活使用了。
出于规范(规划到环境类里,这样也好存储于容器中),定义一个context类,里面声明ThreadLocal的成员变量,然后再来使用。
使用这种方式结合jwt令牌来获取用户id,弹幕有说session和redis的技术,session因为服务器集群的关系不可用了。
分页查询
首先分页查询的方式是query不是json(?进行传参),然后进行DTO设计(类名加上query)当查询方式为query时,不需要加注解@RequestBody
mybatis提供的新插件pagehelper(需要导入依赖)
这个类提供的方法能够将Page存储到ThreadLocal里,并在动态SQL动态添加limit。也就是说分页查询时直接把所有符合条件的数据查出来(保存在page里面)然后pagehelper帮你分到指定页面,最后用page的getResult就能提取当前页面的数据。
新注解NoArgsConstructor和AllArgsConstructor
无参构造函数和全参构造函数,配合Data使用(get和set以及toString方法)
当查询方式为query时,不需要加注解@RequestBody
mybatis-x插件
json格式化
数据库里的记录时间需要格式化为yyy-MM-dd HH:mm:ss
方法一:在对应的成员变量上加注解@JSONFormat(pattern = "yyyy-MM-dd HH:mm:ss")
方法二:在webmvcconfig里加入消息转换器
protected void extendMessageConverters(List<HttpMessageConverter<?>> converters){
log.info("开启扩展消息转换器...");
//创建一个转换器对象
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
//设置对象转换器,可以将java对象转为json字符串
converter.setObjectMapper(new JacksonObjectMapper());
//将装换器对象放入spring MVC框架的容器中
converters.add(0,converter);//将转换器的顺序提前
}
路径参数
/admin/employee/status/{status}
@PostMapping("/status/{status}")
public Result startOrStop(@PathVariable Integer status,Long id)
请求路径规范
动态SQL编写
热部署
第一种手动方式:引入dev依赖,修改代码后重新build就行
第二种自动方式:
导入外部类
当我们导入外部写好的类时,需要将项目编译一下;因为我们手敲的代码是自动编译过的