使用字典表的时候,每次需要的时候都去MySQL数据库查询,是非常不友好,浪费性能的操作,所以可以把字典表的数据放到内存里面去。
首先只需要在项目启动的时候去查询字典表,然后将其放入用静态变量(在项目启动的时候就会初始化)中,需要用的时候就可以直接去内存中取出来即可。
package com.example.demo.dic;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* 写一个工具类去调用dao查询数据,然后放入到静态容器中
*/
@Slf4j
public class DicUtil {
private static DicDao dicDao;
//public static Map<String, List<DictionariesResponse>> cache = new ConcurrentHashMap();
public static Map<String, Object> cache = new ConcurrentHashMap();
static {
//注意此处不能使用依赖注入,因为此时DicDao还没创建出来,可以获取上下文手动创建
dicDao = SpringUtils.getBean(DicDao.class);
qryDicData();
}
public static void qryDicData() {
List<DicEnty> all = dicDao.selectAll();
if (!CollectionUtils.isEmpty(all)) {
for (DicEnty dicEnty : all) {
cache.put(dicEnty.getName(), dicEnty);
}
}
}
/**
* 返回字典数据
*/
public static DicEnty toDataList(String id) {
return (DicEnty) cache.get(id);
}
}
package com.example.demo.dic;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
/**
* 通过spring的applicationContext去获取dictionaryDao,
* 随着项目启动就已经把dictionaryDao给创建了,
* 然后在工具类调用查询方法,就可以获取到数据了
*/
@Component
public class SpringUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
if (SpringUtil.applicationContext == null) {
SpringUtil.applicationContext = applicationContext;
}
}
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
public static Object getBean(String name) {
return applicationContext.getBean(name);
}
public static <T> T getBean(Class<T> clazz) {
return applicationContext.getBean(clazz);
}
public static <T> T getBean(String name, Class<T> clazz) {
return applicationContext.getBean(name, clazz);
}
}