我们在对程序操作的时候,我们的程序会和数据库不停的交汇,如果交汇的太过于平凡数据库的压力太大导致程序运行不流畅,
静态map就可以缓解这方面的问题,静态map就是在项目启动的时候去数据库把对应的数据取出来放到内存中,有些数据仅用于
取出而不会被改动,这些数据都可以放到静态map中,我们在取这些数据的时候就不用去数据库取了,减小了数据的压力。
有一个部门表dept
package com.baidu.entity;
public class Dept {
private Integer did;
private String dname;
public Integer getDid() {
return did;
}
public void setDid(Integer did) {
this.did = did;
}
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
public String toString() {
return "Dept [did=" + did + ", dname=" + dname + "]";
}
public Dept(Integer did, String dname) {
super();
this.did = did;
this.dname = dname;
}
public Dept() {
super();
}
}
静态map放到一个类中
StaticMap.java
package com.baidu.staticmap;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import org.springframework.stereotype.Component;
import com.baidu.entity.Dept;
import com.baidu.mapper.UserMapper;
//这个类交给spring管理
@Component
public class StaticMap {
@Resource
private UserMapper mapper;
public static Map<String,String> map = new HashMap<String,String>();
//项目在启动的时候就是运行这个类,在那时候就会把值存到map中
@PostConstruct
public void init(){
if(map.isEmpty()){
List<Dept> selectDeptList = mapper.selectDeptList();
for (Dept dept : selectDeptList) {
map.put("d"+dept.getDid(), dept.getDname());
}
}
}
//这是取值的方法
public static String getName(String key) {
return map.get(key);
}
}
//我们的这个类是要交给spring管理的,我们要在spring.xml的扫描项里面加上这个类的全称:com.baidu.staticmap<context:component-scan base-//package="com.baidu.service, com.baidu.dao,com.baidu.staticmap"></context:component-scan>
//通过键将map里面的值取出
private String bname;
public String getDname() {
dname = StaticMap.getName("d"+did);return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
这就是我对静态map的理解和代码的实现,希望能给大家带来帮助!