SmartPersistenceLayer 2.0 之基础设置篇
现在我要讲一下,SPL在系统中应该如何应用,通过本篇,你将会学会如何配置SPL到你的系统中。
SPL运行原理
SPL作为一个数据访问平台,最终以DLL的方式体现,那么系统只要引用SPL的DLL就可以开始应用了。
SPL将依赖于两个XML配置文件:数据源配置文件(以下我称之为DatabaseMap.xml)和实体映射文件(以下称之为ClassMap.xml)。这两个配置文件在整个系统运行时,将一次性载入到内存,这样可以提高SPL的运行效率,所以如果这两个配置文件修改了,要IISReset或是重编译才能见到效果。
DatabaseMap.xml
databaseMap.xml是数据源配置文件,在这里配置系统运行的数据库连接,目前支持三种数据源(SQL Server,Oracle,Access),可以在这个文件中配置多个多种数据源,下面举个例子:
<?xml version="1.0" encoding="utf-8"?><map>
<!-- SQL Server服务器配置 -->
<database name="SQL" type="MsSqlServer">
<parameter name="Provider" value="SQLOLEDB.1" />
<parameter name="Password" value="" />
<parameter name="Initial Catalog" value="northwind" />
<parameter name="User ID" value="sa" />
<parameter name="Data Source" value="localhost" />
<classMapFile path="ClassMap1.xml" />
</database>
<!-- SQL Server服务器配置 -->
<database name="ACCESS" type="MsAccess">
<parameter name="Provider" value=" Microsoft.Jet.OLEDB.4.0" />
<parameter name="Data Source" value=" D:\pl\Test\test.mdb" />
<classMapFile path="ClassMap2.xml" />
</database>
<!-- SQL Server服务器配置 -->
<database name="ORACLE" type="Oracle">
<parameter name="Provider" value="MSDAORA.1" />
<parameter name="Password" value="password" />
<parameter name="User ID" value="user" />
<parameter name="Data Source" value="host.domain.com" />
<classMapFile path="ClassMap3.xml" />
</database>
</map>
以上列举了三种数据库的配置信息,其中:
database 的name是指在SPL中要使用的数据源名,这个值要能唯一标识一个连接,这样在SPL中可以直接使用name就可以执行操作了.
database的type有三种:MsSqlServer是指SQL数据库
MsAccess是指Access数据库
Oracle是指ORACLE数据库
parameter是连接中要用到的各个参数,这根据不同的数据源类型会有不同的值,具体的参照上面的写法就可以了.
如果要扩展参数,可以直接添加parameter,因为SPL中从parameter中读取[值对]组装成连接字符串的.
每个连接源上都有一个 <classMapFile path="ClassMap.xml" />是指定这个数据源对应的表与实体的映射信息,可以采用与databaseMap的相对路径指定,也可以指定为绝对路径,下面解释一下ClassMap.xml中的内容.
ClassMap.xml
ClassMap.xml是实体与表的映射关系,我以一个典型的例子要做解释,比如目前有个表为学生表Student,有字段:
Id 序号 Int pk 自动增长
No 学号 Varchar(40) pk
Name 姓名 Varchar(40)
Birthday 出生日期 Datatime
Grade 年级 Int
Score 入学成绩 decimal
那么对应的映射信息为:
<class name="StudentEntity" table="Student" database="MyDB">
<attribute name="Id" column="Id" type="Integer" increment="true" key="primary" />
<attribute name="No" column="No" type="String" key="primary" />
<attribute name="Name" column= StudentEntity "Name" type="String" />
<attribute name="Birthday" column="Birthday" type="Date" />
<attribute name="Grade" column="Grade" type="Integer" />
<attribute name="Score" column="Score" type="Decimal" />
</class>
从以上的配置我们很容易理解:
class 的name是指实体名,这要与实体类的名称相同
table是指映射的数据库是的表名;
database是指定实体默认的数据库源,对应databaseMap.xml的配置;
IsSaveToMemory为可选配置,如果此表为维护性数据,具有字段少,记录少,修改频率低,使用频率高,就可以设置IsSaveToMemory="true",这样,这个表的数据将会自动在内存存取,具体将在后面讲解.
attribute是每一个对应的实体属性与表字段名映射,
name为实体的属性名,要与实体类中的属性相同;
column是指表的字段名,这与表中的字段要相同;
type是指类型,如整数型Integer,字符型String,日期型Date,数字型Decimal等.
increment是指字段是否为自动增长,是则标识为true,这样SPL将会从数据库中自动生成;
key值为primary说明此字段是主键,在SPL中每个表必须要有一个主键,这作为表的唯一标识;
Class的Type对照表:
SQL Server
|
Oracle
|
XML中的type
|
.NET内置类型
|
||
bigint
|
NUBMER
|
BigInt
|
System.Int64
|
||
binary
|
|
Binary
|
System.Byte[]
|
||
bit
|
|
Boolean
|
System.Boolean
|
||
char
|
CHAR
|
String
|
System.String
|
||
datetime
|
DATE
|
Date
|
System.DateTime
|
||
decimal
|
NUMBER
|
Decimal
|
System.Decimal
|
||
float
|
FLOAT
|
Double
|
|