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 ); } } }