hibernate中使用EHCache实现二级缓存

为了提高减少频繁访问数据库,提高系统性能,使用Hibernate的二级缓存插件EHCache

详细实现如下:hibernate.cfg.xml文件





    
        
        oracle.jdbc.driver.OracleDriver
        jdbc:oracle:thin:@127.0.0.1:1521:ORCL
        mw_app
        app

        
        org.hibernate.dialect.Oracle10gDialect
        
        10
        
        thread
        
        true
        
        
            org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory
        
        
        true

        
        true
        
        update
        none
        
        
        

    

ehcache.xml配置文件如下:


    
    

    
    

    
    

实体类配置文件中需要添加ehcache的usage 。实体类文件Grade.hbm.xml文件代码如下:





    
        
        
            
        
        
        

        
            
            
        
    

简单的配置文件配置完成后,我们开始我们的测试类。测试类代码如下:

package com.hibernate.service;

import com.hibernate.entity.Grade;
import com.hibernate.entity.Student;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.util.List;

public class HandledGradeService {

    Configuration configuration ;
    private SessionFactory sessionFactory;
    private Session session;
    private Session session1;
    private Transaction transaction;
    private Transaction transaction1;

    @Before
    public void beforeInit(){
        configuration = new Configuration();
        configuration.configure();
        sessionFactory = configuration.buildSessionFactory();
        session = sessionFactory.openSession();
        session1 = sessionFactory.openSession();
        transaction = session.beginTransaction();
        transaction1 = session1.beginTransaction();
    }

    @Test
    public void handleGrade(){
        List gradeList = session.createSQLQuery("SELECT * FROM GRADE")
                .addEntity(Grade.class).list();
        System.out.println(gradeList.get(0).getGname());

        Grade grade1 = session1.get(Grade.class,1);
        System.out.println(grade1.getGname());

        transaction.commit();
        transaction1.commit();
    }

    @After
    public void closeResource(){
        session.close();
        sessionFactory.close();
    }

}

运行结果:

三月 17, 2019 7:16:28 下午 org.hibernate.cache.ehcache.AbstractEhcacheRegionFactory getCache
WARN: HHH020003: Could not find a specific ehcache configuration for cache named [org.hibernate.cache.internal.StandardQueryCache]; using defaults.
三月 17, 2019 7:16:28 下午 org.hibernate.cache.ehcache.AbstractEhcacheRegionFactory getCache
WARN: HHH020003: Could not find a specific ehcache configuration for cache named [com.hibernate.entity.Student]; using defaults.
三月 17, 2019 7:16:28 下午 org.hibernate.cache.ehcache.internal.strategy.EhcacheAccessStrategyFactoryImpl createEntityRegionAccessStrategy
WARN: HHH020007: read-only cache configured for mutable entity [com.hibernate.entity.Grade]
三月 17, 2019 7:16:28 下午 org.hibernate.tool.hbm2ddl.SchemaUpdate execute
INFO: HHH000228: Running hbm2ddl schema update
Hibernate: SELECT * FROM GRADE
Java四班
Java二班
三月 17, 2019 7:16:29 下午 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl stop
INFO: HHH10001008: Cleaning up connection pool [jdbc:oracle:thin:@127.0.0.1:1521:ORCL]

Process finished with exit code 0

我们发现Hibernate 仅进行了一次数据库查询操作。

至于Hibernate 版本和EHCache版本如下:


    org.hibernate
    hibernate-core
    5.0.7.Final


    org.hibernate
    hibernate-ehcache
    5.0.2.Final

 

你可能感兴趣的:(数据库,Hibernate二级缓存,EHCache)