package edu.fjut.utils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MyCache {
//使用map来模拟hibernate的一级缓存
private static Map<Integer,Student> maps=new HashMap<Integer,Student>();
public static void main(String[] args) {
//运行结果
getStudent(1); //缓存没有student1,从数据库中取数据,并加入缓存
getStudent(1); //从缓存中取student1
getStudent(2); //缓存没有student2,从数据库中取数据,并加入缓存
getStudent(1); //从缓存中取student1
getStudent(2); //从缓存中取student2
getStudent(3); //缓存没有student3,从数据库中取数据,并加入缓存
getStudent(4); //缓存没有student4,从数据库中取数据,并加入缓存
getStudent(3); //从缓存中取student3
}
//根据Id来获取学生信息
public static Student getStudent(Integer id){
//先到缓存去取
if(maps.containsKey(id)){
System.out.println("从缓存中取student"+id);
return maps.get(id);
}else{
//缓存没有,从数据库中去取
System.out.println("缓存没有student"+id+",从数据库中取数据,并加入缓存");
Student stu=MyDB.getStudentFromDB(id);
if(null!=stu){
//放入缓存
maps.put(id,stu);
}
return stu;
}
}
}
//模拟数据库
class MyDB{
//数据库里存放着学生的记录
private static List<Student> list=new ArrayList<Student>();
//初始化数据库 添加记录
static{
list.add(new Student(1,"ada"));
list.add(new Student(2,"小颜"));
list.add(new Student(3,"雅各布"));
}
//从数据库取出学生
public static Student getStudentFromDB(Integer id){
for(Student stu:list){
if(stu.getId().equals(id)){
return stu;
}
}
return null;
}
}
//模拟学生类
class Student{
private Integer id;
private String name;
public Student(Integer id, String name) {
super();
this.id = id;
this.name = name;
}
public Student() {
super();
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}