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; } }
相关推荐
8. **第二级缓存**:除了默认的第一级缓存(Session级别的缓存),Hibernate还支持第二级缓存,可以提高数据访问效率。通过Cache接口和实现如Ehcache插件,可以配置和使用二级缓存。 9. **集合映射**:Hibernate...
3. **多对多关系优化**:尽量避免直接使用多对多关系,通过建立中间表来模拟,以减少关联查询。 **三、查询优化** 1. **避免过多的JOIN操作**:尽量减少在HQL或Criteria API中的JOIN,改为多次单表查询,利用缓存...
Hibernate支持多种集合类型的映射,如`Set`(无序、不重复)、`List`(有序、可重复)、`Bag`(无序、可重复,通常用`List`来模拟)和`Map`等。 #### 对象状态管理 - **概述** 在Hibernate中,对象的状态被分为...
测试类对系统中的各个功能模块进行调用,模拟各种输入,验证输出是否符合预期,以此来保证系统的稳定性和可靠性。 在学生信息管理系统的开发过程中,数据库的使用也是必不可少的。Java可以通过JDBC(Java Database ...
- **一级缓存**(Session级别的缓存): 自动启用,无需额外配置。 - **二级缓存**(应用级别的缓存): 可选配置,适用于读多写少的场景。 **优点**: - **简化数据访问层**:提供统一的API,减少了大量的模板代码。...
- **二级缓存机制及配置**:了解Hibernate的二级缓存机制及其配置方法。 - **乐观锁的配置及应用**:掌握乐观锁的配置方法及其应用场景。 - **反向工程**:学习使用工具自动生成实体类和映射文件。 ##### 3.7 扩展...
3. **集合框架**:List、Set、Map接口及其实现类的使用,如ArrayList、LinkedList、HashSet、HashMap等。 4. **IO流**:文件操作、字符流与字节流、缓冲流、对象序列化等。 5. **多线程**:线程的创建、同步与通信、...
14. **Google Guice**: 另一款依赖注入框架,轻量级且易于理解和使用。 15. **Apache Commons Math**: 提供了数学和统计计算功能,如矩阵运算、随机数生成等。 这些工具类涵盖了Java开发中的各个方面,从基本的...
### jBPM 4.4 开发指南 ...这一章介绍了如何使用Signavio web建模器来设计和编辑流程图。 以上内容概括了《jBPM 4.4 开发指南》的核心知识点,希望能帮助读者更好地理解和掌握jBPM 4.4的技术要点。
8. **Spring Framework**:对于企业级应用开发,Spring框架是一个广泛使用的库,它提供了依赖注入、AOP(面向切面编程)、事务管理、数据访问集成等功能,是Java EE开发的重要工具。 9. **JSON处理**: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} {...
- **性能优化**: 如使用缓存、减少 I/O 操作次数等。 - **调试技术**: 使用调试工具如 IntelliJ IDEA 或 Eclipse。 **3. Java 的软件设计模式和架构模式** - **设计模式**: 如单例模式、工厂模式等。 - **架构模式*...
4. **Hibernate4.x**:探讨Hibernate框架的高级特性及使用方法。 5. **Spring4.x**:介绍Spring框架的核心概念及其最新版本的主要改进。 #### 七、JavaEE前端进阶 1. **JavaScript**:介绍JavaScript的基础知识...
- **Map**:一种存储键值对映射关系的数据结构,主要有HashMap和TreeMap两种实现。 #### 3. JVM与内存管理 - **类加载机制**:Java类的加载是由类加载器完成的,主要包括启动类加载器、扩展类加载器和应用类加载器...
- **缓存技术**:了解Hibernate的缓存机制。 - **性能优化**:学会如何优化Hibernate的性能。 **3. Spring(重点)** - **IOC、AOP**:理解依赖注入和面向切面编程的概念。 - **DataSource**:掌握Spring中的数据源...
同时支持在使用过程中,灵活调整映射关系,因此用户可以用API动态的创建表结构的模型,从而实现各种动态类型和表的映射(例如POJO中包含一个Map,用于映射各种动态扩展的字段)企业级特性支持 SQL分析,性能统计,...
对于高级工程师来说,还需要掌握一些更复杂的概念和技术,如工作流、规则引擎、搜索引擎、缓存引擎、任务调度、身份认证、报表服务、系统测试、集群、负载均衡、故障转移等。 #### 十一、JavaEE系统架构师技能 ...
- **`Iterable`接口**:使一个类具有可迭代性,可以使用`for-each`循环。 ### 笔试题总结 - **常见笔试题**:包括但不限于字符串反转、数组排序、链表操作等。 - **解题思路**:理解题目需求,选择合适的数据结构...