using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using Zhaizj.Framework.Data;
using Zhaizj.Framework.ORM;
using Zhaizj.Framework.Web;
namespace Zhaizj.Framework {
///
/// 从内存数据库中查询数据
///
///
/// 数据持久化在 /framework/data/ 目录下,以json格式存储。加载之后常驻内存。
/// 特点:直接从内存中检索,速度相当于 Hashtable。插入和更新较慢(相对而言),因为插入和更新会在内存中重建索引。
///
public class cdb {
///
/// 查询类型 T 的所有数据
///
///
/// 返回所有数据的列表
public static List findAll() where T : CacheObject {
IList list = MemoryDB.FindAll( typeof( T ) );
return db.getResults( list );
}
///
/// 根据 id 查询某条数据
///
///
///
/// 返回某条数据
public static T findById( int id ) where T : CacheObject {
Object obj = MemoryDB.FindById( typeof( T ), id );
return (T)obj;
}
///
/// 根据名称查询数据,因为已经根据名称做了索引,所以速度很快。
///
///
///
/// 返回数据列表
public static List findByName( String name ) where T : CacheObject {
return findBy( "Name", name );
}
///
/// 根据 id 获取对象的名称
///
///
///
///
public static String findNameById( int id ) where T : CacheObject {
T obj = cdb.findById( id );
if (obj == null) return "";
return obj.Name;
}
///
/// 根据属性查询数据。框架已经给对象的所有属性做了索引。
///
///
/// 属性名称
/// 属性的值
/// 返回数据列表
public static List findBy( String propertyName, Object val ) where T : CacheObject {
findAll();
IList list = MemoryDB.FindBy( typeof( T ), propertyName, val );
return db.getResults( list );
}
///
/// 查询分页后的数据列表。不用提供当前页信息,因为在web环境中,框架会自动获取当前页面。
/// 分页是在内存中进行的,也就是先查询内存中所有记录,然后根据当前页和 pageSize 获取特定页面的数据。
///
///
/// 属性名称
/// 属性的值
/// 每页需要显示的数据量
/// 分页数据列表,包括当前页、总记录数、分页条等
public static DataPage findPage( String propertyName, Object val, int pageSize ) where T : CacheObject {
List list = findBy( propertyName, val );
DataPage page = DataPage.GetPage( list, pageSize );
return page;
}
///
/// 查询分页后的数据列表。不用提供当前页信息,因为在web环境中,框架会自动获取当前页面。
/// 分页是在内存中进行的,也就是先查询内存中所有记录,然后根据当前页和 pageSize 获取特定页面的数据。
///
///
/// 每页需要显示的数据量
/// 分页数据列表,包括当前页、总记录数、分页条等
public static DataPage findPage( int pageSize ) where T : CacheObject {
List list = findAll();
DataPage page = DataPage.GetPage( list, pageSize );
return page;
}
///
/// 插入数据,并对所有属性做索引,速度较慢。新插入的数据会被同步持久化到磁盘。
///
public static void insert( CacheObject obj ) {
MemoryDB.Insert( obj );
}
///
/// 插入时,只针对特定属性做索引,提高速度
///
/// 需要做索引的属性
/// 属性的值
public static void insertByIndex( CacheObject obj, String propertyName, Object pValue ) {
MemoryDB.InsertByIndex( obj, propertyName, pValue );
}
///
/// 更新对象,并将对象同步持久化的磁盘,同时更新索引
///
///
///
public static Result update( CacheObject obj ) {
return MemoryDB.Update( obj );
}
///
/// 更新数据(不持久化,也不做索引)
///
///
public static Result updateNoIndex( CacheObject obj ) {
return new Result();
}
///
/// 从内存中删除数据,并同步磁盘中内容。
///
///
public static void delete( CacheObject obj ) {
MemoryDB.Delete( obj );
}
}
}