hiberante二級緩存二(測試)

寫測試類
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對象,當下次再查詢時則仍然需要從數據庫中獲取
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章