`

手把手教你写ORM(四)

阅读更多
现在中午不睡一会儿就头晕。

前一篇有人留言说为什么不写web.config?我个人非常反对庞大的web.config文件,可能其根源就在于互联星空系统的巨大的配置和它带来的混乱,自己实现一个小巧灵活的机制是我比较喜欢的,这样可以降低系统的侵入性,也可以方便我改成其他语言的版本。

这里我们来给刚才的Resource类加一个壳,因为我们毕竟不能用绝对的Path去访问,我们需要一个通过类名就可以访问得到配置的方式。

在加这个壳之前我们先规划一下配置文件,我们这里需要两种配置文件,一个是配置数据库连接的,一种是配置每个类的操作的,前边说过了,对输入和结果的映射在类的Attribute里完成,这样子配置每个类的配置文件就可以相当的简单了

数据库连接配置文件:
<?xml version="1.0" encoding="utf-8" ?>
<config>
  
<session name="test">
    
<connectionstring>Data Source=.\SQLEXPRESS;AttachDbFilename="C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\test.mdf";Integrated Security=True;Connect Timeout=30;User Instance=True</connectionstring>
    
<assambly>Alexander.Xbase.SqlExec</assambly>
    
<provider>Alexander.Xbase.SqlExec.Exec</provider>
    
<configbase>D:\MyDocuments\Visual Studio 2005\Projects\Alexander\Xbase\MenTest\bin\Debug\</configbase>
  
</session>
</config>

每个Session配置一个数据库连接,configbase是用来指定这个连接的配置文件所在的目录,以后获取每个类的配置文件就在这个配置项的值所在的目录里面。数据库配置文件在System.AppDomain.CurrentDomain.BaseDirectory里面搜索,不用配置


每个类的配置文件:
<?xml version="1.0" encoding="utf-8" ?>
<class>
    
<sql name="insert">insert into tb (aaa,bbb) values (#aaa,#bbb)</sql>
    
<sql name="getall" cache="true">select * from tb</sql>
</class>

Sql节配置SQL指令,参数用#开头,属性Cache指示这个查询是否被缓存

我们需要两个类来分别表示这两种配置文件来提供对其的访问方式。
对于数据库配置文件我们先提供一个类来表示其结构:
 1 public class SessionParameter
 2    {
 3        private string connectionstring;
 4
 5        public string Connectionstring
 6        {
 7            get return connectionstring; }
 8            set { connectionstring = value; }
 9        }

10        private string assambly;
11
12        public string Assambly
13        {
14            get return assambly; }
15            set { assambly = value; }
16        }

17        private string provider;
18
19        public string Provider
20        {
21            get return provider; }
22            set { provider = value; }
23        }

24        private string configbase;
25
26        public string Configbase
27        {
28            get return configbase; }
29            set { configbase = value; }
30        }

31    }

32}

然后通过下面的类来访问,这里我们统统使用Xpath来搜索节点。
    public class Sessions
    
{
        
private static string _configPath;
        
private static XmlDocument dat; 

        
static Sessions()
        
{
            _configPath 
= System.AppDomain.CurrentDomain.BaseDirectory + "xbase.xml";

        }


        
public SessionParameter GetSessionByName(string Name)
        
{
            Resource res 
= new Resource(_configPath);
            dat 
= new XmlDocument();
            dat.LoadXml(res.Config[_configPath]);
            
string xp1 = "/config/session[@name=\""+Name+"\"]/connectionstring";
            
string xp2 = "/config/session[@name=\"" + Name + "\"]/assambly";
            
string xp3 = "/config/session[@name=\"" + Name + "\"]/provider";
            
string xp4 = "/config/session[@name=\"" + Name + "\"]/configbase";
            SessionParameter sp 
= new SessionParameter();
            sp.Connectionstring 
= dat.SelectSingleNode(xp1).InnerText;
            sp.Assambly 
= dat.SelectSingleNode(xp2).InnerText.Trim();
            sp.Provider 
= dat.SelectSingleNode(xp3).InnerText.Trim();
            sp.Configbase 
= dat.SelectSingleNode(xp4).InnerText.Trim();
            
return sp;
        }

    }

这个样子就可以通过Session sec=Session.GetSessionByName(Name)来获取一个数据库配置文件了。
实现读取每个类的配置文件的方式相同,这里省略了,下来自己写

这里我们实现了包装读取配置的操作的类,接下来我们来看,如何实现插件的方式动态提供数据库操作组件

to be continue......
分享到:
评论

相关推荐

    手写ORM框架笔记.txt

    手写ORM框架笔记

    手写orm

    NULL 博文链接:https://fangyong2006.iteye.com/blog/746016

    手写ORM框架.java

    博文资源

    一个简单的JavaORM框架寂寞消遣之作可供学习参考只有几百行代码。

    一个简单的Java ORM框架,如果你是新手,对MVC框架的实现感兴趣的话,可以看看,一共也就几个类非常简单。

    自己写的orm辅助类

    自己写的orm辅助类 .定义实体的特性(如对应的表名 主键名 属性对应的列名 实体和数据库对象的相互转换 简单实体的 CRUD操作 QQ交流群60168829 欢迎C# ASP.NET 和SQL新手 老手 高手加入 谢谢

    自己写的ORM

    自己写的ORM,看看大家给几分

    手写ORM框架

    这是一个手写的ORM框架,类似于Mybaties框架,可以对数据库进行建表、增、删、查、改操作,每个功能都重载了多种方法,以满足用户需求。此外,还有缓存功能,第二次进行同样的查找操作时将不会调用数据库,而是在...

    Java8应用封装,手写ORM,LOG,framework

    ##公用资源 ###敏捷第一,提供丰富语法糖,方法化,片段化 #####手写容器 #####手写ORM #####手写Log #####自动化配置 #####常用工具类 #####大量回调处理

    Python 手写ORM-我的一个数据库访问工具

    ORM所生成的代码一般不太可能写出很高效的算法,在数据库应用上更有可能会被误用,主要体现在对持久对象的提取和和数据的加工处理上,如果用上了ORM,程序员很有可能将全部的数据提取到内存对象中,然后再进行过滤和...

    自写的access orm框架

    自己写的操作ACCESS 数据库的orm框架,支持添加、修改、删除、分页查询等,方便快捷

    .NET ORM架构源码

    基于ORM模式开发的.NET框架,可在框架内自由添加想要的功能

    手写简易版ORM框架(仿mybatis)

    自己手写的一个半自动框架,里面有运行例子,部分代码从mybatis中抽出

    自己动手写轻量级ORM(C#)

    最近在看反射,突然想写一个ORM工具,要轻量级的,不要配置文档,先不管效率,就是一个小工具,在项目初期方便挂数据库。 我的目标就是在数据库中建个表,在项目中写个模型,然后用上这个ORM工具,就能实现数据库的...

    ORM框架ORM框架ORM框架ORM框架

    能实现基本的数据库操作能实现基本的数据库操作

    Flunet ORM 教程3

    轻量级.Net ORM FluentData教程,分为三个压缩包,下载时请注意! 1fluentdata ORM .7z 2fluentdata ORM.7z 3fluentdata ORM.7z

    Flunet ORM 教程2

    轻量级.Net ORM FluentData教程,分为三个压缩包,下载时请注意! 1fluentdata ORM .7z 2fluentdata ORM.7z 3fluentdata ORM.7z

    一个自己写的ORM原理的映射实例

    一个自己写的ORM映射实例,他是ORM映射的彻底的底层实现,真正的ORM映射的原理

    c# DB操作ORM框架

    .NET ORM框架,基于Dapper效率高,包括根据条件Update,Delete有修改字段,各种单表查寻,操作简单。 支持分库,简单分页,暂不支持分表(想办法支持中,有头续的可以联系)。联系:else-love@qq.com

    自个写的.NET ORM带例子VS2010

    自个写的.NET ORM带例子VS2010

    ORM思想的深入学习ORM.zip

    这里面包括了Hibernate和MyBatis的实现ORM思想的原理,以及讲解了什么是ORM思想。仿照Hibernate自定义了一个简单的增删改查的ORM框架,还有测试代码。

Global site tag (gtag.js) - Google Analytics