二级缓存的应用(ehcache)

来源:互联网 发布:淘宝苹果靠谱店铺推荐 编辑:程序博客网 时间:2024/05/16 06:37
实体类:
package com.ematchina.test;

import java.sql.Timestamp;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Version;

import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;

@Entity
@Table(name = "book")
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
public class Book {
    

    private int id;    
    //private Timestamp lastDate;    
    private String name;    
    private int price;
    private int version;

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name = "id", length = 11)
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    
    @Version
    @Column(name = "version",length = 11)
    public int getVersion() {
        return version;
    }
    public void setVersion(int version) {
        this.version = version;
    }
    
    @Column(name = "name",length = 10)
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    
    @Column(name = "price",length = 11)
    public int getPrice() {
        return price;
    }
    public void setPrice(int price) {
        this.price = price;
    }
    
    
    
    /*@Version
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "lastDate")
    public Date getLastDate() {
        return lastDate;
    }
    public void setLastDate(Timestamp lastDate) {
        this.lastDate = lastDate;
    }*/
    
    
}

hibernate.cfg.xml

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration>

    <session-factory>
    
        <property name="show_sql">true</property>
    
        <property name="connection.url">jdbc:mysql://localhost:3306/bbb</property>
        <property name="connection.username">root</property>
        <property name="connection.password"></property>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        
        <!-- 以下是配置二级缓存  -->
        <property name="hibernate.cache.use_second_level_cache">true</property>
        <property name="hibernate.cache.use_query_cache">true</property>
        <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
        
        <mapping class="com.ematchina.test.Book"/>
        
    </session-factory>

</hibernate-configuration>



Test:

@org.junit.Test
    public void select(){
        
        
        Session session = sessionFactory.openSession();
        Transaction tx = null;
        
        try {
            tx = session.beginTransaction();
            
//本次查询是经过数据库
            Query query = session.createQuery("from Book");
            List<Book> list = query.list();
            System.out.println(list.size());
            
            for(Book book : list){
                System.out.println(book.getName());
            }
            
            //消除缓存指定的对象
            sessionFactory.evict(Book.class, 60);
            
            tx.commit();
            
            System.out.println("-----------");
            
//本次查询实体是经过缓存不经过数据库
            Session session2 = sessionFactory.openSession();
            Transaction tx1 = session2.beginTransaction();
            Book book  = (Book) session2.get(Book.class, 60);
            System.out.println(book.getName());
            tx1.commit();
            
            

        } catch (Exception ex) {
            if (null != tx) {
                tx.rollback();
            }
        } finally {
            if (null != session) {
                session.close();
            }
        }
    }
原创粉丝点击