`
jacobcookie
  • 浏览: 94814 次
社区版块
存档分类
最新评论

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

 

1
3
分享到:
评论

相关推荐

    Hibernate API Doc (3.1.3)

    8. **第二级缓存**:除了默认的第一级缓存(Session级别的缓存),Hibernate还支持第二级缓存,可以提高数据访问效率。通过Cache接口和实现如Ehcache插件,可以配置和使用二级缓存。 9. **集合映射**:Hibernate...

    hibernate优化

    3. **多对多关系优化**:尽量避免直接使用多对多关系,通过建立中间表来模拟,以减少关联查询。 **三、查询优化** 1. **避免过多的JOIN操作**:尽量减少在HQL或Criteria API中的JOIN,改为多次单表查询,利用缓存...

    hibernate笔记

    Hibernate支持多种集合类型的映射,如`Set`(无序、不重复)、`List`(有序、可重复)、`Bag`(无序、可重复,通常用`List`来模拟)和`Map`等。 #### 对象状态管理 - **概述** 在Hibernate中,对象的状态被分为...

    java面向对象学生信息管理系统

    测试类对系统中的各个功能模块进行调用,模拟各种输入,验证输出是否符合预期,以此来保证系统的稳定性和可靠性。 在学生信息管理系统的开发过程中,数据库的使用也是必不可少的。Java可以通过JDBC(Java Database ...

    java核心面试

    - **一级缓存**(Session级别的缓存): 自动启用,无需额外配置。 - **二级缓存**(应用级别的缓存): 可选配置,适用于读多写少的场景。 **优点**: - **简化数据访问层**:提供统一的API,减少了大量的模板代码。...

    2017年尚学堂Java培训课程大纲.docx

    - **二级缓存机制及配置**:了解Hibernate的二级缓存机制及其配置方法。 - **乐观锁的配置及应用**:掌握乐观锁的配置方法及其应用场景。 - **反向工程**:学习使用工具自动生成实体类和映射文件。 ##### 3.7 扩展...

    JAVA基础,框架知识,WEB知识,数据库知识面试题.

    3. **集合框架**:List、Set、Map接口及其实现类的使用,如ArrayList、LinkedList、HashSet、HashMap等。 4. **IO流**:文件操作、字符流与字节流、缓冲流、对象序列化等。 5. **多线程**:线程的创建、同步与通信、...

    java常用开发工具类大全,涵盖常见工作的问题.rar

    14. **Google Guice**: 另一款依赖注入框架,轻量级且易于理解和使用。 15. **Apache Commons Math**: 提供了数学和统计计算功能,如矩阵运算、随机数生成等。 这些工具类涵盖了Java开发中的各个方面,从基本的...

    java lib库部分2

    8. **Spring Framework**:对于企业级应用开发,Spring框架是一个广泛使用的库,它提供了依赖注入、AOP(面向切面编程)、事务管理、数据访问集成等功能,是Java EE开发的重要工具。 9. **JSON处理**:Java中处理...

    Java学习笔记-个人整理的

    {4.15}Map的迭代}{90}{section.4.15} {4.15.1}字符统计}{91}{subsection.4.15.1} {5}格式化输入输出}{94}{chapter.5} {5.1}时间与日期}{94}{section.5.1} {5.1.1}各类时间日期转换}{94}{subsection.5.1.1} {...

    java学习路线.pdf

    - **性能优化**: 如使用缓存、减少 I/O 操作次数等。 - **调试技术**: 使用调试工具如 IntelliJ IDEA 或 Eclipse。 **3. Java 的软件设计模式和架构模式** - **设计模式**: 如单例模式、工厂模式等。 - **架构模式*...

    小码哥Java学科的课程大纲.docx

    4. **Hibernate4.x**:探讨Hibernate框架的高级特性及使用方法。 5. **Spring4.x**:介绍Spring框架的核心概念及其最新版本的主要改进。 #### 七、JavaEE前端进阶 1. **JavaScript**:介绍JavaScript的基础知识...

    java面试,Java基础知识

    - **Map**:一种存储键值对映射关系的数据结构,主要有HashMap和TreeMap两种实现。 #### 3. JVM与内存管理 - **类加载机制**:Java类的加载是由类加载器完成的,主要包括启动类加载器、扩展类加载器和应用类加载器...

    java学习路线

    - **缓存技术**:了解Hibernate的缓存机制。 - **性能优化**:学会如何优化Hibernate的性能。 **3. Spring(重点)** - **IOC、AOP**:理解依赖注入和面向切面编程的概念。 - **DataSource**:掌握Spring中的数据源...

    支持多数据库的ORM框架ef-orm.zip

    同时支持在使用过程中,灵活调整映射关系,因此用户可以用API动态的创建表结构的模型,从而实现各种动态类型和表的映射(例如POJO中包含一个Map,用于映射各种动态扩展的字段)企业级特性支持 SQL分析,性能统计,...

    java技术体系图

    对于高级工程师来说,还需要掌握一些更复杂的概念和技术,如工作流、规则引擎、搜索引擎、缓存引擎、任务调度、身份认证、报表服务、系统测试、集群、负载均衡、故障转移等。 #### 十一、JavaEE系统架构师技能 ...

    java面试题及答案-非常全面(包括基础、网络、数据结构、算法及IT大厂面经)

    - **`Iterable`接口**:使一个类具有可迭代性,可以使用`for-each`循环。 ### 笔试题总结 - **常见笔试题**:包括但不限于字符串反转、数组排序、链表操作等。 - **解题思路**:理解题目需求,选择合适的数据结构...

Global site tag (gtag.js) - Google Analytics