DataRabbit 轻量的数据访问框架(09) -- IDataSchemaAccesser

简介: (完全限定类名:DataRabbit.Schema.IDataSchemaAccesser)   在前面介绍的很多访问器的实现中,都不需要使用者提供任何关于数据库表结构的信息(比如,主键、主外键关系等),这是因为它们都借助于IDataSchemaAccesser来获取目标数据表的大纲信息,本文就来介绍如何使用DataRabbit框架中的IDataSchemaAccesser来访问和操作数据表的大纲。
   (完全限定类名:DataRabbit.Schema.IDataSchemaAccesser

   在前面介绍的很多访问器的实现中,都不需要使用者提供任何关于数据库表结构的信息(比如,主键、主外键关系等),这是因为它们都借助于IDataSchemaAccesser来获取目标数据表的大纲信息,本文就来介绍如何使用DataRabbit框架中的IDataSchemaAccesser来访问和操作数据表的大纲。

   我们可以从DataRabbit的入口点IDataAccesser中获取IDataSchemaAccesser引用: 
   IDataSchemaAccesser dataSchemaAccesser =  dataAccesser.GetDataSchemaAccesser(null) ;
   注意,与获取前面介绍的各种访问器一样,IDataSchemaAccesser也是通过一个Get方法得到。

   IDataSchemaAccesser 主要提供两个功能,一是获取指定表的大纲信息,二是依据大纲信息创建一个新的数据表。下面是IDataSchemaAccesser的完整定义:
    public   interface  IDataSchemaAccesser : ITransactionAccesser 
    {
        
///   <summary>
        
///  ClearCache 清空缓存的Schema
        
///   </summary>
         void  ClearCache();

        
///   <summary>
        
///  GetDataSchema 获取目标表table的数据大纲
        
///   </summary>        
        DataSchema GetDataSchema( string  table);

        
///   <summary>
        
///  CreateTable 在数据库中创建大纲与schema一致的表
        
///   </summary>        
         void  CreateTable( string  table ,DataSchema schema,  bool  createFKeys) ;
    }

   通过接口定义,我们看到,它也继承 ITransactionAccesser 接口,这表明,IDataSchemaAccesser可以在非事务环境或事务环境中工作。
   DataRabbit使用DataSchema来封装数据表的大纲信息,它由多个ColumnSchema和N个ForeignKey构成,如下所示:

   ColumnSchema封装了一个数据列的大纲信息,包括:列名、列的类型、是否为主键、是否为自增列、是否允许为空、备注、最大长度等。
   ForeignKey封装了当前数据表的某个外键信息,包括:外键列名称、主表的名称、对应的主表主键名称。
   另外,DataSchema还提供了一个名为PrimaryKey的属性,用于标志当前表的主键--可以表示单主键,也可以表示联合主键。


    最后,我们给出一个例子,该例子演示如何在Oracle中创建一个Student表,该表的结构与SqlServer中的Student表结构一样。

            IDataAccesser dataAccesserToSqlServer  =   ... ; // 通过DataAccesserFactory创建IDataAccesser
            IDataAccesser dataAccesserToOracle  =   ... ; // 通过DataAccesserFactory创建IDataAccesser

            DataSchema studentSchema 
=  dataAccesserToSqlServer.GetDataSchemaAccesser(null).GetDataSchema( " Student " );
            dataAccesserToOracle.GetDataSchemaAccesser(null).CreateTable(
" Student " , studentSchema,  false );

 

转到:DataRabbit 轻量的数据访问框架 -- 序





目录
相关文章
|
XML 数据可视化 Java
非常轻量、高性能、可集成、可扩展的流程引擎compileflow
compileflow Process引擎是淘宝工作流TBBPM引擎之一,是专注于纯内存执行,无状态的流程引擎,通过将流程文件转换生成java代码编译执行,简洁高效。当前是阿里业务中台交易等多个核心系统的流程引擎。
|
数据库连接 数据库 负载均衡
DataRabbit 轻量的数据访问框架(19)-- 读写分离与隔离级别
在高并发的系统中,我们常采用多数据库分散放置、读写分离、细粒度的隔离级别设定等策略来提高系统的性能。DataRabbit3.3 以及以上版本对这三种策略都给予了内置的支持。 (1)数据库分散放置:对于较大型的系统,在设计数据库时,我们可以根据业务范围将其设计为多个数据库,而不是一个,然后将这些数据库部署在不同的物理服务器上,以分担负载。
830 0
|
数据库 Java Spring
DataRabbit 轻量的ORM框架(17)-- 使用DataRabbit的最佳实践
在DataRabbit 轻量的数据访问框架(12)-- 将DataRabbit融入架构 一文中介绍了如何将DataRabbit与三层架构结合起来,但是,在实际的项目中,每一层是如何使用DataRabbit的了?本文将展示作者在项目中使用DataRabbit的标准做法。
688 0
|
SQL 数据库
DataRabbit 轻量的ORM框架(18)-- 捕获数据库访问异常的详细信息
最新版本的DataRabbit(版本号:V3.2)新增一项重要功能--可以捕获访问数据库时产生的异常的详细信息,包括:异常对象、Sql语句、sql参数的名称和值。这是由IDBOperationLogger接口提供支持的。
828 0
|
缓存 数据库
DataRabbit 轻量的数据访问框架(01) -- ITransactionAccesser
(完全限定类名:DataRabbit.ITransactionAccesser)    在DataRabbit 轻量的数据访问框架 --序 中,我们已经知道,所有的访问器接口都继承了ITransactionAccesser接口。
955 0
DataRabbit 轻量的数据访问框架(04) -- IEntityRelationLoader
(完全限定类名:DataRabbit.ORM.IEntityRelationLoader)   在DataRabbit框架提供的ORM功能之中,除了IOrmAccesser接口展现的核心ORM功能外,IEntityRelationLoader接口也提供了一些有意义的功能。
780 0
|
关系型数据库 数据库 Oracle
DataRabbit 轻量的数据访问框架(06) -- IRelationAccesser
(完全限定类名:DataRabbit.Relation.IRelationAccesser)       前面介绍的IOrmAccesser是对单表进行ORM访问,而ITableAccesser是对单表进行基于关系的访问,如果我们要进行联合查询这样的跨表搜索,则使用它们就无法达成目标。
915 0