接下来的笔记都会以难点与一些不常见的方法为主,一些重复的crud并不会出现哦
ThreadLocal类
ThreadLocal 并不是一个Thread,而是Thread的局部变量,它用于创建线程局部变量。
- 核心思想:每个线程都有自己独立的变量副本。这意味着,即使多个线程使用同一个
**<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">ThreadLocal</font>**
对象,它们也无法看到或修改彼此的变量值。这完美地避免了多线程环境下的共享资源竞争问题,无需使用同步(synchronized)。ThreadLocal为每个线程提供单独一份存储空间,具有线程隔离的效果,只有在线程内才能获取到对应的值,线程外则不能访问。 - 简单比喻:就像一个公司(进程)里有多个员工(线程)。公司提供了一个储物柜(
**<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">ThreadLocal</font>**
对象),但这个储物柜很神奇。每个员工用他的工卡去开这个储物柜时,打开的都是只属于他自己的那个小格子。员工A看不到员工B格子里的东西,反之亦然。这个公共的储物柜(**<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">ThreadLocal</font>**
)只是提供了访问各自独立空间的“钥匙”或“机制”。
在本项目中,当我们在新增员工的时候,需要表明是谁对新增员工进行了创建和修改,那么我们就需要拿到当前登录用户的Token,并对其解析,就可以得到这两个值
先创建使用静态工具类BaseContext实现ThreadLocal
使用BaseContext进行存储,后续在调用时,只需在调用处使用getCurrentId()方法,便可以动态的得到当前操作的id
分页查询
这样主要使用了PageHelper插件来简化分页代码的开发
select * from employee后面会自动补上limit(),括号内为传递的参数
- 要使用的依赖:
- 员工分页查询的实现
时间格式化
对时间字段的显示进行统一的规定的两种方法:
- 在属性上加上注解@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”),对日期进行格式化
但这种方式,需要在每个时间属性上都要加上该注解,使用较麻烦,不能全局处理。
- 在WebMvcConfiguration中扩展SpringMVC的消息转换器,统一对日期类型进行格式处理
自定义消息转换器,可以对全局的变量有效,因为这是我们自己定义的配置类,会在全局生效
/*** 扩展Spring MVC框架的消息转换器-->主要用于日期* @param converters*/
protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {log.info("扩展消息转换器...");//创建一个消息转换器对象MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();//需要为创建的消息转换器对象设置一个对象转换器,对象转换器可以将java对象序列化为json数据messageConverter.setObjectMapper(new JacksonObjectMapper());//将上面的消息转换器对象追加到mvc框架的转换器集合中converters.add(0, messageConverter);
}