Stella 知识库--SPL的使用

-- 系列文章与Stella Forum v2.0搭配使用效果更好 --

(刚才有人告诉我,我写了那么多的笔记,还是看不懂系统到底是怎么回事,真晕……)
今天我们来看最后一部分,SPLDAL和SPLEntity,这个是sf2所使用的数据操作层,负责和sql server 2000交互。
本文的目的是为了让大家对SPL有一个大概的了解,在我看来,SPL最大的好处就是使用方便,而且不用写存储过程了,以前一个小系统就写几十个存储过程的事情不再发生了。
SPL的全称是 SmartPersistenceLayer,是基于o/r mapping 技术的数据操作组件,这个是我在博客园挖到的宝,嘿嘿,下面来看一片断,先有个感性认识
public void RemoveTopic(int id)
{
TopicEntity te=new TopicEntity();
te.Id=id;
te.Delete();
}

上面代码的操作结果是从数据库中删除一个主题,相当于下面的操作
string connstr=;
conn=new sqlconnection;
sql="delete from topic where id="+id;
cmd=new sqlcommand;
cmd.executenonquery;
而如果我们使用存储过程,那上面的代码还要增加,并且还涉及到存储过程的创建
对比一下,使用SPL是否很简单呢?
哈,是否很神奇呢,其实我的第一感觉也是很神奇。
o/r mapping 即数据库/实体映射技术,这个我也不是很明白,照我的理解,就是一个数据库表对应一个实体类,然后我们操作实体类,对应的数据库里的表也会变化。像上面的 例子TopicEntity就是我们的实体类,操作他,就在数据库中删除一个记录了。
上面我说的明白了吗?接着往下分析。
数据库和实体类是怎么相互影响的呢?当然是由一个中间体负责联系啦,在这里这个中间体就是XML配置文件。在XML配置文件里做好配置,然后放到web目录下,就可以啦。
配置文件分两种,一种指定和数据库的联系,看这个
<?xml version="1.0" encoding="utf-8"?><map>
<database name="stella2" type="MsSqlServer">
<parameter name="Provider" value="SQLOLEDB.1" />
<parameter name="Password" value="123" />
<parameter name="Initial Catalog" value="stella2" />
<parameter name="User ID" value="sa" />
<parameter name="Data Source" value="(local)" />
<classMapFile path="ClassMap.xml" />
</database></map>

第二种里是详细的数据库表/实体类映射信息,就是上面classMapFile节指定的那个文件。
下面是一个映射的例子
<class name="MemberEntity" table="Member" database="stella2">
<attribute name="Id" column="Id" type="Integer" increment="true" key="primary" />
<attribute name="Name" column="Name" type="String" />
<attribute name="Pwd" column="Pwd" type="Binary" />
<attribute name="Email" column="Email" type="String" />
</class>
而实体类都放在SPLEntity中,下面是上面XML配置关联的实体类。
[Serializable()]
public class MemberEntity : EntityObject
{

/// <summary>Id</summary>
public const string __ID = "Id";

/// <summary>Name</summary>
public const string __NAME = "Name";

/// <summary>Pwd</summary>
public const string __PWD = "Pwd";

/// <summary>Email</summary>
public const string __EMAIL = "Email";

private int m_Id;

private string m_Name;

private System.Byte[] m_Pwd;

private string m_Email;

/// <summary>构造函数</summary>
public MemberEntity()
{
}

/// <summary>属性Id </summary>
public int Id
{
get{return this.m_Id;}
set{this.m_Id = value;}
}

/// <summary>属性Name </summary>
public string Name
{
get{return this.m_Name;}
set{this.m_Name = value;}
}

/// <summary>属性Pwd </summary>
public System.Byte[] Pwd
{
get{return this.m_Pwd;}
set{this.m_Pwd = value;}
}

/// <summary>属性Email </summary>
public string Email
{
get{return this.m_Email;}
set{this.m_Email = value;}
}
}

通过这样做,就可以很神奇的把数据库表和实体类关联起来。
把配置文件放到目录下就可以开始工作吗?很不幸,像我上篇文章说的.net 还没有那么智能,因此我们需要手动指定,用下面的语句在Global中设置
string DatabaseXml=this.m_ApplicationPath + "Config/DatabaseMap.xml";
Setting.Instance().DatabaseMapFile=Server.MapPath(DatabaseXml);
其实想想,好像所有需要XML配置的东西都需要在Global中预先配置,比如sf2使用的log4net,还有.net提供的自定义配置节。

工作到此就算完成了,接下来你可以完全放弃讨厌的存储过程,享受数据操作的乐趣了。

关于SPL的更详细的信息,可以看这里
http://www.cnblogs.com/tintown/category/12787.html

sf2 中对SPL的使用就是把这个作为一个数据操作层,所以SPLDAL和SPLEntity是一起的,而且SPLEntity只给SPLDAL使用,因为我们 有自己的代表业务需求的实体类Model。如果以后要使用SQLServer Data Provider,那也不会影响其它地方。

你可能感兴趣的:(EL)