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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值