`
dreamoftch
  • 浏览: 496561 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Hibernate和EhCache整合

阅读更多

 

 首先是pom.xml,这里面有一些dependency是没有用的,都贴上吧。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.tch.test</groupId>
  <artifactId>simple-web</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>simple-web Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <junit-version>4.11</junit-version>
    <spring-version>3.2.6.RELEASE</spring-version>
    <hiberante-version>3.6.10.Final</hiberante-version>
    <struts2-version>2.3.16</struts2-version>
    <mysql-version>5.1.28</mysql-version>
    <log4j-version>1.2.17</log4j-version>
    <slf4j-version>1.7.5</slf4j-version>
    <aspectj-version>1.7.4</aspectj-version>
    <postgresql-version>9.1-901-1.jdbc4</postgresql-version>
    <ehcacheVersion>2.6.11</ehcacheVersion>
  </properties>

  <dependencies>
    <!-- junit -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>${junit-version}</version>
      <scope>test</scope>
    </dependency>
    <!-- spring-context -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring-version}</version>
    </dependency>
    <!-- spring-orm -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-orm</artifactId>
      <version>${spring-version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>${spring-version}</version>
    </dependency>
    <!-- hibernate -->
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-core</artifactId>
      <version>${hiberante-version}</version>
    </dependency>
    <!-- hibernate-proxool -->
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-proxool</artifactId>
      <version>${hiberante-version}</version>
    </dependency>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-ehcache</artifactId>
      <version>${hiberante-version}</version>
    </dependency>
    <!-- struts2 -->
    <dependency>
      <groupId>org.apache.struts</groupId>
      <artifactId>struts2-core</artifactId>
      <version>${struts2-version}</version>
    </dependency>
    <!-- struts2-spring-plugin -->
    <dependency>
      <groupId>org.apache.struts</groupId>
      <artifactId>struts2-spring-plugin</artifactId>
      <version>${struts2-version}</version>
    </dependency>
    <!-- mysql -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>${mysql-version}</version>
    </dependency>
    <!-- log4j -->
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>${log4j-version}</version>
    </dependency>
    <!-- slf4j-log4j -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>${slf4j-version}</version>
    </dependency>
    <!-- aspectjrt -->
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjrt</artifactId>
      <version>${aspectj-version}</version>
    </dependency>
    <!-- aspectjweaver -->
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>${aspectj-version}</version>
    </dependency>
    <dependency>
      <groupId>postgresql</groupId>
      <artifactId>postgresql</artifactId>
      <version>${postgresql-version}</version>
    </dependency>
    <dependency>
      <groupId>net.sf.ehcache</groupId>
      <artifactId>ehcache-core</artifactId>
      <version>${ehcacheVersion}</version>
    </dependency>
  </dependencies>
  <build>
    <finalName>simple-web</finalName>
  </build>
</project>

 

 

hibernate.cfg.xml:

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration SYSTEM "classpath://org/hibernate/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
    <property name="hibernate.connection.password">postgres</property>
    <property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/postgres</property>
    <property name="hibernate.connection.username">postgres</property>
    <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>

    <property name="hibernate.current_session_context_class">thread</property>
    <property name="hibernate.show_sql">true</property>

    <!-- For singleton factory -->
    <!-- <property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory</property> -->

    <!-- enable second level cache and query cache -->
    <property name="hibernate.cache.use_second_level_cache">true</property>
    <property name="hibernate.cache.use_query_cache">true</property>
    <property name="net.sf.ehcache.configurationResourceName">/ehcache.xml</property>
    <property name="hibernate.hbm2ddl.auto">update</property>
    <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
    <property name="hibernate.cache.region.factory_class">net.sf.ehcache.hibernate.EhCacheRegionFactory</property>
    <mapping class="com.tch.test.entity.Employee" />
  </session-factory>
</hibernate-configuration>

 

ehcache.xml:

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="false"
    monitoring="autodetect" dynamicConfig="true">
 
    <diskStore path="java.io.tmpdir/ehcache" />
 
    <defaultCache maxEntriesLocalHeap="10000" eternal="false"
        timeToIdleSeconds="120" timeToLiveSeconds="120" diskSpoolBufferSizeMB="30"
        maxEntriesLocalDisk="10000000" diskExpiryThreadIntervalSeconds="120"
        memoryStoreEvictionPolicy="LRU" statistics="true">
        <persistence strategy="localTempSwap" />
    </defaultCache>
 
    <cache name="query.Employee" maxEntriesLocalHeap="10000" eternal="false"
        timeToIdleSeconds="5" timeToLiveSeconds="10">
        <persistence strategy="localTempSwap" />
    </cache>
    
    
 
    <cache name="org.hibernate.cache.internal.StandardQueryCache"
        maxEntriesLocalHeap="5" eternal="false" timeToLiveSeconds="120">
        <persistence strategy="localTempSwap" />
    </cache>
 
    <cache name="org.hibernate.cache.spi.UpdateTimestampsCache"
        maxEntriesLocalHeap="5000" eternal="true">
        <persistence strategy="localTempSwap" />
    </cache>
</ehcache>

 

log4j.properties:

log4j.rootLogger=error,CONSOLE

###################
# Console Appender
###################
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %5p (%c:%L) - %m%n


log4j.logger.org.hibernate.cache=debug

 

 

实体类:

package com.tch.test.entity;
 
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
 
@Entity
@Table(name = "EMPLOYEE")
@Cache(usage=CacheConcurrencyStrategy.READ_ONLY)
public class Employee {
 
    @Id
    @GeneratedValue
    @Column(name = "emp_id")
    private long id;
 
    @Column(name = "emp_name")
    private String name;
 
    @Column(name = "emp_salary")
    private double salary;
 
    public Employee(String name, double salary) {
        this.name = name;
        this.salary = salary;
    }
    
    public Employee() {
        super();
    }

    public long getId() {
        return id;
    }
 
    public void setId(long id) {
        this.id = id;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public double getSalary() {
        return salary;
    }
 
    public void setSalary(double salary) {
        this.salary = salary;
    }

    @Override
    public String toString() {
        return "Employee [id=" + id + ", name=" + name + ", salary=" + salary + "]";
    }
 
}

 

 

HibernateUtil工具类:

package com.tch.test.util;
 
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
 
public class HibernateUtil {
 
    private static SessionFactory sessionFactory;
     
    private static SessionFactory buildSessionFactory() {
        try {
            Configuration configuration = new Configuration().configure("hibernate.cfg.xml");
             
            SessionFactory sessionFactory = configuration.buildSessionFactory();
             
            return sessionFactory;
        }
        catch (Throwable ex) {
            System.err.println("Initial SessionFactory creation failed." + ex);
            ex.printStackTrace();
            throw new ExceptionInInitializerError(ex);
        }
    }
     
    public static SessionFactory getSessionFactory() {
        if(sessionFactory == null) sessionFactory = buildSessionFactory();
        return sessionFactory;
    }
}

 

 

测试类:

 

package com.tch.test;
 
import java.util.Arrays;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.stat.Statistics;

import com.tch.test.entity.Employee;
import com.tch.test.util.HibernateUtil;
 
public class HibernateEHCacheMain {
 
    public static void main(String[] args) {
//        saveData(HibernateUtil.getSessionFactory());
        
//        Statistics stats = HibernateUtil.getSessionFactory().getStatistics();
//        stats.setStatisticsEnabled(true);
        
        getData(HibernateUtil.getSessionFactory());
        
//        printStats(stats, 1);
        
        getData(HibernateUtil.getSessionFactory());
        
//        printStats(stats, 2);
        
        getData(HibernateUtil.getSessionFactory());
        
//        printStats(stats, 3);
        
        getData(HibernateUtil.getSessionFactory());
        
//        printStats(stats, 4);
        
        HibernateUtil.getSessionFactory().close();
    }
    
    private static void getData(SessionFactory sessionFactory) {
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();
        System.err.println("begin get data ...");
//        session.createQuery("from Employee").list();
//        session.createQuery("from Employee").setCacheable(true).setCacheRegion("query.Employee").list();
//        ((Employee) session.load(Employee.class, 34l)).getName();
//        session.createQuery("from Employee").list();
//        System.out.println(session.createQuery("from Employee").setCacheable(true).list());
        session.createQuery("from Employee").setCacheable(true).list();
        
        transaction.commit();
    }
 
    private static void saveData(SessionFactory sessionFactory) {
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();
        
        Employee employee1 = new Employee("employee 1", 1000);
        
        Employee employee2 = new Employee("employee 2", 1000);
        
        Employee employee3 = new Employee("employee 3", 1000);
        
        Employee employee4 = new Employee("employee 4", 1000);
        
        session.save(employee1);
        session.save(employee2);
        session.save(employee3);
        session.save(employee4);
        
        transaction.commit();
    }

    private static void printStats(Statistics stats, int i) {
        System.out.println("***** " + i + " *****");
        System.out.println("Fetch Count="
                + stats.getEntityFetchCount());
        System.out.println("Second Level Hit Count="
                + stats.getSecondLevelCacheHitCount());
        System.out
                .println("Second Level Miss Count="
                        + stats
                                .getSecondLevelCacheMissCount());
        System.out.println("Second Level Put Count="
                + stats.getSecondLevelCachePutCount());
    }
 
}

 

首先调用saveData()插入数据,然后调用getData()查询数据(是在不同的session中),会看的只有一条sql执行了,其他的都是从ehcache的缓存中读取的(根据log中的信息:caching query results in region: org.hibernate.cache.StandardQueryCache; timestamp=5862689108340736可以知道)

 

就说明二级缓存生效了。。。。

 

 

 

分享到:
评论

相关推荐

    hibernate+ehcache

    3. **整合 Hibernate 和 Ehcache**:整合 Hibernate 与 Ehcache 可以利用缓存机制来避免频繁的数据库查询,提高应用程序响应速度。通过在 Hibernate 配置文件中添加 Ehcache 配置,可以指定哪些实体或查询结果应该被...

    Spring+Hibernate+ehcache整合

    在"Spring+Hibernate+ehcache整合"项目中,开发者已经完成了一个将这三个框架集成的基础工程。虽然Struts没有被明确提及,但通常在Web开发中,Spring与Struts结合可以构建更完整的MVC架构。这个整合项目可能包含以下...

    spring3 hibernate4 ehcache实例

    【Spring3 Hibernate4 Ehcache整合实例详解】 在Java企业级应用开发中,Spring、Hibernate和Ehcache是三个非常重要的框架和技术。Spring作为轻量级的IoC(Inversion of Control)和AOP(Aspect Oriented ...

    hibernate+ehcache jar包

    《深入理解Hibernate与Ehcache整合机制》 在Java企业级开发中,数据持久化是不可或缺的一环,而Hibernate作为一款强大的ORM(对象关系映射)框架,极大地简化了数据库操作。然而,随着应用程序规模的扩大,数据量的...

    hibernate整合ehcache的jar包.zip

    当Hibernate与Ehcache整合时,能够实现数据的快速访问,减少对数据库的直接访问,从而提高系统的响应速度。 **1. Hibernate概述** Hibernate是Java开发中的一个关键工具,它提供了一种在Java应用和关系型数据库之间...

    Spring boot hibernate ehcache maven 整合源码

    在Spring Boot的基础上,我们常常会整合其他技术,如Hibernate和Ehcache,来构建高效的数据存储和缓存解决方案。Maven作为Java项目的构建工具,负责管理项目的依赖关系。在这个源码包中,我们将探讨如何将这些组件...

    spring struts2 hibernate ehcache整合

    这篇博客“spring struts2 hibernate ehcache整合”显然探讨了如何将这四个组件集成到同一个项目中,以提升应用程序的性能和效率。以下是关于这些技术及其整合的关键知识点的详细说明: 1. **Spring框架**:Spring...

    最新版本的Struts2+Spring4+Hibernate4框架整合

    整合使用最新版本的三大框架(即Struts2、Spring4和Hibernate4),搭建项目架构原型。 项目架构原型:Struts2.3.16 + Spring4.1.1 + Hibernate4.3.6。 此外,还有:log4j、slf4j、junit4、ehcache等知识点。 项目...

    Struts2+Spring+Hibernate+Ehcache+AJAX+JQuery+Oracle 框架集成用户登录注册Demo工程

    1.通过google ehcache-spring-annotatios.jar自动注解方式实现整合Spring+Ehcache。 2.Action里通过struts2-spring-plugin.jar插件自动根据名字注入。 3.Ajax无刷新异步调用Struts2,返回Json数据,以用户注册为例。...

    spring、 spring mvc、 hibernate、 ehcache Java后台框架

    在Java后台开发中,Spring、Spring MVC、Hibernate和Ehcache是四个非常关键的框架,它们各自承担着不同的职责并协同工作,构建出高效、稳定且可扩展的应用系统。 Spring框架是Java企业级应用的核心框架,它提供了一...

    Hibernate_EHcache.doc

    《深入理解Hibernate与Ehcache整合》 在Java企业级开发中,Hibernate作为一种优秀的对象关系映射(ORM)框架,极大地简化了数据库操作。然而,随着应用规模的扩大,数据库的读写压力也随之增加,此时引入二级缓存就...

    jar包整合:Springmvc+hibernate+Ehcache+shior+mysql+Oracle+fastjson

    标题中的"jar包整合:Springmvc+hibernate+Ehcache+shiro+mysql+Oracle+fastjson"指的是一个综合性的Java项目,它集成了多种技术框架,用于构建高效、可扩展的Web应用。让我们逐一解析这些技术的核心知识点: 1. **...

    Hibernate + EhCache 实现数据缓存的处理

    通过以上步骤,我们可以有效地整合Hibernate和EhCache,实现高效的数据缓存处理,提升应用程序的性能和用户体验。在实际开发中,理解并熟练掌握这些知识点,能够帮助开发者构建出更加健壮、响应更快的系统。

    配置Spring+hibernate使用ehcache作为second-levelcache.docx

    Ehcache 是一个开源的缓存框架,提供了一个高性能的缓存解决方案,可以与 Hibernate 和 Spring 整合使用,以提高应用程序的性能。 缓存的重要性 在 Web 应用程序中,数据库访问是性能瓶颈之一。数据库访问需要消耗...

    Maven项目Spring4+Hibernate4+shiro+Ehcache项目集成

    在本项目中,我们主要探讨的是一个基于Maven构建的Java Web应用,它整合了Spring 4、Hibernate 4、Apache Shiro以及Ehcache等多个关键框架,旨在实现用户角色菜单管理的功能。以下是对这些技术及其集成应用的详细...

    spring、 spring mvc、 hibernate、 ehcache JavaWeb后台框架

    在JavaWeb开发中,Spring、Spring MVC、Hibernate和Ehcache是四个非常关键的框架,它们共同构建了一个高效、灵活的后台系统。下面将详细解释这些框架的核心功能、使用场景以及它们之间的协作关系。 首先,Spring...

    Spring+MyBatis/Hibernate+Ehcache+Maven的Demo Web项目(稳定版)

    1.标题所提及技术的整合,Spring包括mvc、aop、ioc等。个人属于强迫症类型,技术水平怎么样再说,代码必须好看 2.Hibernate几个级别缓存对比。见DaoImpl类 3.Ehcache方法缓存及页面缓存。见applicationContext-cache...

    DWZ+springMvc+hibernate+ehcache 简易的后台管理+即时通讯

    Ehcache可以集成到Spring MVC和Hibernate中,用于缓存HTTP会话、数据库查询结果等,降低系统负载。 5. **即时通讯**:即时通讯(Instant Messaging,IM)功能通常指的是用户可以实时交流的应用或服务。在这个项目中...

    spring3+hibernate4+struts2+dbcp+mysql+json+ehcache+dom4j 合集包

    这是一个整合了多个核心技术的Java Web开发资源包,涵盖了Spring 3、Hibernate 4、Struts 2、DBCP、MySQL、JSON、Ehcache以及DOM4J等组件。以下将详细解析这些技术及其在Web开发中的应用。 1. **Spring框架**:...

    Ehcache 整合Spring 使用页面、对象缓存

    通过上述步骤,Ehcache 可以有效地整合到Spring环境中,实现页面和对象级别的缓存,从而显著提高应用程序的性能。同时,Ehcache的灵活性和扩展性使得它能够适应各种复杂的应用场景,满足不同项目的需求。

Global site tag (gtag.js) - Google Analytics