SPL 说明文件
一、体系结构
首先我们来看看SPL的体系结构:
SPL是数据库和应用程序之间的持久化层,应用程序和SPL通过持久化(Persistent)对象联系在一起。SPL使用app.config或者web.config文件进行设置。Session (会话) 通过这个
代表应用程序和持久化层之间的一次对话的接口。
SessionImp(会话实例)
这个类实现了会话的具体实现。封装了一个ADO.NET连接,查询,编辑操作。
SessionFactory (会话工厂) 
也是Transaction的工厂。保存有必需的(第一级)持久化对象的缓存,用于遍历对象图,或者通过标识符查找对象。并且通过绑定在实体类的自定义属性,反射出数据库表结构,以执行数据库操作。
二、示例代码
我们看看他们是如何协同工作的,请看下面的代码。
实体代码示例: 
/// <summary>
/// 品牌
/// </summary>
[Serializable()]
[Class("Brand")]
public class Brand 
{       
private System.Guid _ID;        
private string _Name;        
/// <summary>
/// ID
/// </summary>
[Key(typeof(Guid))]
public System.Guid ID 
{
get  { return this._ID; }
set { this._ID = value; }
}
        
/// <summary>
/// 名称
/// </summary>
[Property()]
public string Name 
{
get  { return this._Name; }
set  { this._Name = value; }
}
}
三、业务操作代码
/// <summary>
/// 获取品牌列表
/// </summary>
/// <returns>品牌</returns>
public ArrayList GetALL()
{
string sql="select [${0}$] from [Brand]";
sql=string.Format(sql,typeof(shop.Entity.Brand).AssemblyQualifiedName);
ArrayList list = Find(sql);
return list;
} /// <summary>
/// 查找品牌
/// </summary>
/// <param name="oql"> oql语句</param>
/// <returns>品牌</returns>
public ArrayList Find(string oql)
{
Session s = SessionFactory.Instance.OpenSession();
try
{
return s.Find(oql);
}
finally
{
s.Close();
}
} /// <summary>
/// 添加品牌
/// </summary>
/// <param name="o">品牌</param>
public void Add(shop.Entity.Brand o)
{
Session s = SessionFactory.Instance.OpenSession();
try
{
s.Insert(o);
}
finally
{
s.Close();
}
} /// <summary>
/// 删除品牌
/// </summary>
/// <param name="o">品牌</param>
public void Delete(shop.Entity.Brand o)
{
                           Session s = SessionFactory.Instance.OpenSession();
try
{
s.BeginTransaction();
s.Delete(o);
s.CommitTransaction();
}
catch
{
s.RollBackTransaction();
throw;
}
finally
{
s.Close();
}
} /// <summary>
/// 更新品牌信息
/// </summary>
/// <param name="o">品牌</param>
public void Update(shop.Entity.Brand o)
{
Session s = SessionFactory.Instance.OpenSession();
try
{
s.Update(o);
}
finally
{
s.Close();
}
}

解决方案 »

  1.   

    [email protected]主要是看看体系结构……我也在鼓捣这东西……
      

  2.   

    学习一下!
    [email protected]
      

  3.   

    研究一下,学习,学习
    [email protected]
      

  4.   

    我要!谢谢
    [email protected]
      

  5.   

    留下邮件的已经发送压缩包里面包含一个示例项目和一个spl kit工具
    使用spl kit(aps)可以快速生成一个项目(示例项目就是用spl kit生成的)
      

  6.   

    谢谢lz
    [email protected]
      

  7.   

    很想研究这个,谢谢了! [email protected]
      

  8.   

    [email protected]
    给我一份,谢谢了
      

  9.   

    [email protected]我也在鼓蹈这个....
      

  10.   

    不错,.NET在框架方面目前还较欠缺。楼主继续努力!
      

  11.   

    [email protected]兄弟,给我一份啊
      

  12.   

    [email protected],我要一份,谢谢
      

  13.   


    [email protected]
    谢谢
      

  14.   

    [email protected]
    谢谢
    学习
      

  15.   

    [email protected]
    谢谢
    回去学习!
      

  16.   

    thanks  :)
    [email protected]
      

  17.   

    [email protected]   
    谢谢!!
      

  18.   

    nk912114 (at) 163.com 
    呵呵,谢谢
      

  19.   

    以上邮件晚上发给你们
    有兴趣的朋友可以到我的blog发表发表意见
    http://blog.csdn.net/sukyboor/
      

  20.   

    谢谢,我也想学习学习~
    Email:[email protected]
      

  21.   


    楼主这个框架应该不错
    我能不能也来个
    [email protected]
      

  22.   

    谢谢 e-mail:[email protected]
      

  23.   

    [email protected]
    研究,谢谢
      

  24.   

    thank you   [email protected]
      

  25.   

    [email protected]
    谢谢了。
    楼主写的框架跟XPO是不是相似的?
      

  26.   

    [email protected] 研究一下。谢谢。
      

  27.   

    谢谢! 学习一下
    [email protected]
      

  28.   

    [email protected] 
    麻烦楼主了
      

  29.   

    OriesMap() ( ) 信誉:100  2006-04-10 10:30:00  得分: 0  
     
     
       建议放个地址吧。
      
     
    没有空间,呵呵
      

  30.   

    lixionglz(追求) ( ) 信誉:100  2006-04-10 10:11:00  得分: 0  
     
     
       [email protected]
    谢谢了。
    楼主写的框架跟XPO是不是相似的?
      
     
    基本类似
      

  31.   

    [email protected]
    学习学习,谢谢啦!!!
      

  32.   

    SPL ORM 实现基本原理
    spl包含Persister和aps(spl Persister kit)两部分内容。Persister为ORM提供对象持久、关系对象查询、简单事务处理、简单异常管理等功能。数据持久包括一些对象的Insert、Delete、Update、Find等功能,关系对象查询则提供一些基于对象的复杂关系查询。APs是基于vs.net 2003开发的外接程序,职责是帮助开发人员快速映射关系数据库中的业务模型到符合Persister要求的映射实体类, 理论上可以根据设置快速生成一个可以运行的web项目。在ORM实现的前期工作中,为了实现屏蔽各种数据库之间的操作差异,我们需要定义数据操作公有接口,封装基本的数据库Insert,Update,Delete,Query等操作。
    public sealed class DbHelper{
    int ExecNonQuery(string cmdText);
    int ExecDataSet(string cmdText,DataSet entity); 
    object ExecScalar(string cmdText);

    }
    完成后,就是ORM主角——实体(Entity)的实现。ORM中实体的定义可以通过实体类自身包含数据模型元数据的方式实现,也可以通过定义XML的元描述实现。下面讲述了通过实体类自身映射的实现。
    实体(Entity)是实际业务数据的载体,包含业务数据模型的元描述,可以直接由数据库中的某张表或视图生成,也可以根据需要手工创建。.NET中提供了System.Attribute,该类包含访问和测试自定义属性的简便方法。.NET Framework预定义了一些属性类型并使用它们控制运行时行为。我们可以通过继承System.Attribute基类自定义用于描述实体对象映射时所需要的数据模型元数据,包括表名,字段名,字段长度,字段类型等一些常用的数据。
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)]
    public class ClassAttribute: Attribute
    AttributeUsage用来表示该自定义属性可以被绑定在什么样的对象上,这里表示应用在Class或者Struct之上。
    定义一般字段所需要的自定义属性类。
    [AttributeUsage(AttributeTargets.Property)]
    public class PropertyAttribute: BaseFieldAttribute
    定义关键字字段所需的自定义属性类。
    [AttributeUsage(AttributeTargets.Property)]
    public class KeyAttribute: BaseFieldAttribute
    实体定义完成后,我们需要根据实体类中绑定的自定义属性构造出运行期需要的SQL语句,为了收集实体类定义中的数据结构描述,我们需要定义一个类来说明实体在运行期所引用到的所有关于数据持久的信息,包括关键字字段,一般字段等。
    internal class EntityObjInfo
    以上条件具备后,我们需要定义一个工厂类,负责转换数据的程序类型到数据库字段类型,并且构造出Insert,Update,Delete,Query等操作所需要的SQL语句。
    internal class SessionFactory
    会话接口
    public abstract class Session
    以及会话的实现
    public class SessionImp
    会话实现时会将数据实体信息缓存在hashtable中,
    //取得实体类型反射信息
    EntityObjInfo eoi = SessionFactory.GetEOI(theClass);
    这样我们就可以通过实体信息构造出实体对象,并依据绑定的属性执行DbHelper中的操作。
    DbHelper.ExecuteScalar(tx,CommandType.Text,sqls);
    并将返回的数据保存在实体对象中
    private object DataRowToEntityObject(DataRow row,Type theClass)
      

  33.   

    [email protected]
    也给我发一个,谢谢
      

  34.   

    [email protected]
    楼主谢了。
      

  35.   

    谢谢 [email protected] 麻烦也发给我一分 .学习一下
      

  36.   

    不是听堂的那个spl吧,麻烦楼主发一份研究,谢了
    [email protected]
      

  37.   

    來晚了,不知道可以發給我一份研究一下.
    SWEIG0721!126.COM
    ************************************************************************************************************************************************************************************************************************************************************
      

  38.   

    boyxia(>>雪饮狂刀 [抵制日货]<<) ( ) 信誉:98  2006-4-10 11:45:31  得分: 0  
     
     
       
    不是听堂的那个spl吧,麻烦楼主发一份研究,谢了
    [email protected]  
     
    好象是一个名字了,:)
    听棠兄,对不住鸟
    不过实现方式不太一样
      

  39.   

    [email protected]
    谢谢
      

  40.   

    [email protected]
    谢谢弱问一句:持久层框架是什么,有什么用?
      

  41.   

    [email protected]
    谢谢,我正在研究,想看看
      

  42.   

    [email protected] 非常感谢!!!!我想看看!!
      

  43.   

    我也留个名。[email protected]
      

  44.   

    Study Study...
    My Email: [email protected]
      

  45.   

    我也来一份,[email protected]
    谢谢:)
      

  46.   

    你真棒~!
    [email protected]非常感谢~!
      

  47.   

    谢谢楼主了
    [email protected]
      

  48.   

    谢谢楼主
    [email protected]
      

  49.   

    [email protected] 呵呵,搞开源吧,我参加
      

  50.   

    我也想看看。谢谢![email protected]
      

  51.   

    给我发一份,谢谢!
    [email protected]
      

  52.   

    给我一份,谢谢了[email protected]
      

  53.   

    [email protected]即使看不懂也要!
      

  54.   

    ByWangler(冰凌) ( ) 信誉:85  2006-04-10 15:15:00  得分: 0  
     
     
       [email protected] 呵呵,搞开源吧,我参加
      
     代码写太臭了,怕被砖头砸死