使用map来模拟Hibernate的一级缓存

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;
	}
}

 

你可能感兴趣的:(Hibernate,sessionCache)