寫測試類
package com.going.oa.CacheTest;
import junit.framework.TestCase;
import com.going.framework.util.HibernateUtil;
import com.going.oa.model.Attachment;
import org.hibernate.Session;
import org.hibernate.Transaction;
/**
* Created by IntelliJ IDEA.
* User: weiyong
* Date: 2010-3-25
* Time: 13:12:30
* To change this template use File | Settings | File Templates.
*/
public class CacheTest extends TestCase {
public void testCache() {
//保存數據 用於後期數據的測試
Session session = HibernateUtil.currentSession();
Transaction tx = session.beginTransaction();
//定義附件對象
Attachment at = new Attachment();
at.setAttachmentName("##############");
at.setAttachmentSize("22@");
at.setCreateId("123@");
at.setAttachmentPath("ttttt");
session.save(at);
tx.commit();
HibernateUtil.closeSession();
}
/**
* 測試二級緩存對load方法的影響
*/
public void testLoad() {
Session session = HibernateUtil.currentSession();
//根據記錄的Id 經過load方法來獲取實體Id爲8abf8d0c2793c7f0012793c7f3240001的對象
Attachment p_w_upload = (Attachment) session.load(Attachment.class, "8abf8d0c2793c7f0012793c7f3240001");
System.out.println("***1"+p_w_upload.getAttachmentName());
HibernateUtil.closeSession();
Session session3 = HibernateUtil.currentSession();
//根據記錄的Id 經過load方法再一次來獲取實體Id爲8abf8d0c2793c7f0012793c7f3240001的對象
Attachment p_w_upload3 = (Attachment) session3.load(Attachment.class, "8abf8d0c2793c7f0012793c7f3240001");
System.out.println("***3"+p_w_upload.getAttachmentName());
HibernateUtil.closeSession();
}
/**
* 測試二級緩存對get方法的影響
*/
public void testGet() {
Session session = HibernateUtil.currentSession();
//根據記錄的Id 經過get方法來獲取實體Id爲8abf8d0c2793c7f0012793c7f3240001的對象
Attachment p_w_upload = (Attachment) session.get(Attachment.class, "8abf8d0c2793c7f0012793c7f3240001");
System.out.println("***1"+p_w_upload.getAttachmentName());
HibernateUtil.closeSession();
Session session4 = HibernateUtil.currentSession();
//根據記錄的Id 經過get方法再一次來獲取實體Id爲8abf8d0c2793c7f0012793c7f3240001的對象
Attachment p_w_upload4 = (Attachment) session4.get(Attachment.class, "8abf8d0c2793c7f0012793c7f3240001");
System.out.println("***3"+p_w_upload4.getAttachmentName());
HibernateUtil.closeSession();
}
/**
* 測試二級緩存 對HSql語句的影響
*/
public void testHsql() {
//定義sql語句 並經過hsql語句 來查詢數據
String sql = " from Attachment ";
Session session = HibernateUtil.currentSession();
session.createQuery(sql).list();
HibernateUtil.closeSession();
//定義sql語句 並經過相同的hsql語句 來查詢數據
String sql2 = " from Attachment ";
Session session2 = HibernateUtil.currentSession();
session2.createQuery(sql2).list();
HibernateUtil.closeSession();
}
/**
* 測試查詢緩存 對HSql語句的影響
*/
public void testHsql2() {
//定義sql語句 並經過hsql語句 來查詢數據
String sql = " from Attachment ";
Session session = HibernateUtil.currentSession();
List<Attachment> list=session.createQuery(sql).setCacheable(true).list();
System.out.println("***1"+list.size());
HibernateUtil.closeSession();
//定義sql語句 並經過相同的hsql語句 來查詢數據
String sql2 = " from Attachment ";
Session session2 = HibernateUtil.currentSession();
List<Attachment> list2=session2.createQuery(sql2).setCacheable(true).list();
System.out.println("***2"+list2.size());
HibernateUtil.closeSession();
}
}
testLoad 的測試結果 ::(發送一次查詢)
Hibernate:
/* load com.going.oa.model.Attachment */ select
p_w_upload0_.ATTACHEMENT_ID as ATTACHEM1_0_0_,
p_w_upload0_.ATTACHMENT_NAME as ATTACHMENT2_0_0_,
p_w_upload0_.ATTACHMENT_PATH as ATTACHMENT3_0_0_,
p_w_upload0_.ATTACHMENT_SIZE as ATTACHMENT4_0_0_,
p_w_upload0_.UPLOAD_TIME as UPLOAD5_0_0_,
p_w_upload0_.CREATE_Id as CREATE6_0_0_
from
OA_ATTACHMENT p_w_upload0_
where
p_w_upload0_.ATTACHEMENT_ID=?
***1##############
***3##############
testGet的測試結果 ::(發送一次查詢)
Hibernate:
/* load com.going.oa.model.Attachment */ select
p_w_upload0_.ATTACHEMENT_ID as ATTACHEM1_0_0_,
p_w_upload0_.ATTACHMENT_NAME as ATTACHMENT2_0_0_,
p_w_upload0_.ATTACHMENT_PATH as ATTACHMENT3_0_0_,
p_w_upload0_.ATTACHMENT_SIZE as ATTACHMENT4_0_0_,
p_w_upload0_.UPLOAD_TIME as UPLOAD5_0_0_,
p_w_upload0_.CREATE_Id as CREATE6_0_0_
from
OA_ATTACHMENT p_w_upload0_
where
p_w_upload0_.ATTACHEMENT_ID=?
***1##############
***3##############
配置二級緩存 不配置查詢緩存時 testHsql的測試結果 (發送倆次查詢)
Hibernate:
/*
from
Attachment */ select
p_w_upload0_.ATTACHEMENT_ID as ATTACHEM1_0_,
p_w_upload0_.ATTACHMENT_NAME as ATTACHMENT2_0_,
p_w_upload0_.ATTACHMENT_PATH as ATTACHMENT3_0_,
p_w_upload0_.ATTACHMENT_SIZE as ATTACHMENT4_0_,
p_w_upload0_.UPLOAD_TIME as UPLOAD5_0_,
p_w_upload0_.CREATE_Id as CREATE6_0_
from
OA_ATTACHMENT p_w_upload0_
***12
Hibernate:
/*
from
Attachment */ select
p_w_upload0_.ATTACHEMENT_ID as ATTACHEM1_0_,
p_w_upload0_.ATTACHMENT_NAME as ATTACHMENT2_0_,
p_w_upload0_.ATTACHMENT_PATH as ATTACHMENT3_0_,
p_w_upload0_.ATTACHMENT_SIZE as ATTACHMENT4_0_,
p_w_upload0_.UPLOAD_TIME as UPLOAD5_0_,
p_w_upload0_.CREATE_Id as CREATE6_0_
from
OA_ATTACHMENT p_w_upload0_
***22
配置二級緩存 再配置上查詢緩存時 testHsql2的測試結果 (發送一次查詢)
Hibernate:
/*
from
Attachment */ select
p_w_upload0_.ATTACHEMENT_ID as ATTACHEM1_0_,
p_w_upload0_.ATTACHMENT_NAME as ATTACHMENT2_0_,
p_w_upload0_.ATTACHMENT_PATH as ATTACHMENT3_0_,
p_w_upload0_.ATTACHMENT_SIZE as ATTACHMENT4_0_,
p_w_upload0_.UPLOAD_TIME as UPLOAD5_0_,
p_w_upload0_.CREATE_Id as CREATE6_0_
from
OA_ATTACHMENT p_w_upload0_
***12
***22
經過測試能夠得出 load一條記錄後就會緩存到二級緩存中,若是再使用id來load記錄時,首先會用id到緩存中去找,若是找到則直接從緩存返回。若是沒找到則從新到數據庫中load出 來。 get一條記錄後就會緩存到二級緩存中,若是再使用id來get記錄時,首先會用id到緩存中去找,若是找到則從緩存中返回。若是沒找到才從數據庫中load出來 但使用hsql獲取的list對象,當下次再查詢時則仍然須要從數據庫中獲取