Eva
Java粉絲募集中
  • 簡介
  • 我們的優勢
  • 最新消息
  • 下載與使用
  • 範例與說明
    • Eva Objects >
      • Bean類別定義
      • Entity型別定義
      • Struct型別定義
      • 建立Entity空白物件
      • 建立Entity修改物件
      • 建立Entity條件物件
      • 建立Struct值物件
    • Eva_ORM >
      • ORM程式主體
      • 使用條件物件執行操作
      • 執行更複雜條件的操作.
      • 分頁取回資料
      • 操作JDBC的參數
      • Array Property的操作
      • Collection Property的操作
      • 更複雜的Collection Property
      • 指定表格名稱
      • 新增資料庫Dialect
    • Eva_IOC >
      • IOC程式主體
      • AOP應用
    • Eva_Struct >
      • Struct範例
      • Bit Strcut範例
      • 指標範例
      • 於Eva_ORM中使用
    • Eva_Sort >
      • 依指定Properties排序
      • 部份排序
      • 優先排序部份
    • Eva_Cache >
      • hashing-based cache
      • 非hashing-based cache
  • API列表
  • 技術支援
    • 協助開發
  • 相關書籍

nonhashing-based cache

Eva_Cache也支援非hashing-based的cache, 其使用介面為QueriedResultCache, 它使用起來就如同一個小型資料庫般, 可對它進行查詢資料的動作. 
package com.logntw.eva.cache.defo;

import java.util.ArrayList;
import java.util.List;

import junit.framework.Assert;

import org.junit.Test;

import com.logntw.eva.anno.bean.ComparisonSeq;
import com.logntw.eva.anno.orm.Entity;
import com.logntw.eva.anno.orm.Id;
import com.logntw.eva.bean.condition.ConditionObj;
import com.logntw.eva.cache.QueriedResultCache;
import com.logntw.eva.condition.OP;
import com.logntw.eva.orm.ConverterUtil;
import com.logntw.eva.orm.EntityUtil;
import com.logntw.eva.orm.ORMapper;
import com.logntw.eva.orm.ORMappers;
import com.logntw.eva.orm.DBConnectionProvider;
import com.logntw.eva.orm.defo.DefaultTableCreator;
import com.logntw.eva.orm.defo.DefoORMappers;
import com.logntw.eva.orm.defo.conn.HSQLDB_1_8ConnectionProvider;

public class DefoQueriedResultCacheTestf
{
  @Entity
  public static interface X extends Comparable<Object>
  {
    @Id
    @ComparisonSeq(0)
    public String getA();
    public void setA(String a);
    
    @Id
    @ComparisonSeq(1)
    public void setB(boolean b);
    public boolean getB();
    
    @Id
    @ComparisonSeq(2)
    public int getC();    
    public void setC(int c);
    
    public void setD(String d);
        
    public String getE();              
  }
  
  private final static String dbName = "DefoQueriedResultCacheTestf";
  @Test
  public void testDefoQueriedResultCache() throws Exception
  {      
    QueriedResultCache cache = new DefoQueriedResultCache(DefoCacheSpaceProvider.getProvider());
    
    DBConnectionProvider provider = new HSQLDB_1_8ConnectionProvider(dbName);    
    ORMappers mappers = DefoORMappers.getInstance(provider);
    
    EntityUtil.loadPackage(mappers, "com.logntw.eva.cache.defo.DefoQueriedResultCacheTestf");
    
    ConverterUtil.registerCDCPackage(mappers, "my cdc package.");
    ConverterUtil.registerODCPackage(mappers, "my odc package.");
    
    DefaultTableCreator.create(mappers, X.class);

    mappers.open();
    
    ORMapper<X> g = mappers.getMapper(X.class);
    
    ConditionObj<X> cx1 = g.newCondition();  
    cx1.If(OP.GREATER).setC(3);
    
    ConditionObj<X> cx2 = g.newCondition();
    cx2.If(OP.GREATER).setC(3);
    cx2.If(OP.NOT_LIKE).setA("abc%");
    
    ConditionObj<X> cx3 = g.newCondition();
    cx3.If(OP.LESS).setC(5);
  
    ConditionObj<X> cx4 = g.newCondition();    
    cx4.If(OP.NOT_EQUALS).setC(5);
        
    List<X> list = new ArrayList<X>();
    
    X x1 = g.newObject();    
    x1.setC(3);    
    X x2 = g.newObject();    
    x2.setC(3);
    x2.setA("abccd");    
    X x3 = g.newObject();
    x3.setC(4);
    x3.setA("abcd");    
    X x4 = g.newObject();
    x4.setC(5);
    x4.setA("abc");    
    X x5 = g.newObject();  
    x5.setC(6);  
    x5.setA("abcx");    
    X x6 = g.newObject();
    x6.setC(7);    
    X x7 = g.newObject();
    x7.setC(5);    
    x7.setA("aaa%");    
    X x8 = g.newObject();
    x8.setC(4);    
    x8.setA("123");
    X x9 = g.newObject();
    x9.setC(4);    
    x9.setA("abc");
    
    
    list.add(x1);
    list.add(x2);
    list.add(x3);
    list.add(x4);
    list.add(x5);
    list.add(x6);
    list.add(x7);
    list.add(x8);
    list.add(x9);
    
    cache.insert(cx1, list);
    
    Assert.assertEquals(cache.select(cx3), null);
    Assert.assertEquals(cache.select(cx4), null);
          
    // a - b -> just check "'v' not like 'abc.*'"
    Assert.assertEquals(cache.select(cx2).size(), 4);// x1, x6, x7, x8
    Assert.assertEquals(cache.select(cx2).get(0), x1);
    Assert.assertEquals(cache.select(cx2).get(1), x6);
    Assert.assertEquals(cache.select(cx2).get(2), x7);
    Assert.assertEquals(cache.select(cx2).get(3), x8);
    Assert.assertEquals(cache.select(cx2, 0, 3).size(), 3);
        
    
    ConditionObj<X> cx5 = g.newCondition();
    cx5.If(OP.GREATER).setC(3);
    cx5.If(OP.LIKE).setA("abc%");

    
    cache.insert(cx2, cache.select(cx2));
    cache.update(x3);      
    Assert.assertEquals(cache.select(cx5), null);
    Assert.assertEquals(cache.select(cx2).size(), 4);
    cache.update(x8);
    Assert.assertEquals(cache.select(cx2), null);
    
    mappers.close();
  }
}
Powered by Create your own unique website with customizable templates.