DataRabbit 轻量的数据访问框架(06) -- IRelationAccesser

简介: (完全限定类名:DataRabbit.Relation.IRelationAccesser)       前面介绍的IOrmAccesser是对单表进行ORM访问,而ITableAccesser是对单表进行基于关系的访问,如果我们要进行联合查询这样的跨表搜索,则使用它们就无法达成目标。
   (完全限定类名:DataRabbit.Relation.IRelationAccesser) 
   
   前面介绍的IOrmAccesser是对单表进行ORM访问,而ITableAccesser是对单表进行基于关系的访问,如果我们要进行联合查询这样的跨表搜索,则使用它们就无法达成目标。这时,你可以使用IRelationAccesser。与IOrmAccesser和ITableAccesser的针对性不同(它们针对数据库中的某个表),IRelationAccesser针对的是整个目标数据库。在DataRabbit中,所有的跨表操作推荐使用IRelationAccesser来完成(除非以后有更好的解决方案)。

   IRelationAccesser将数据访问分成两类:Query和Command。Query返回DataSet,Command没有返回值。另外,IRelationAccesser还支持执行带有参数的查询语句。
   我们可以从DataRabbit的入口点IDataAccesser中获取IRelationAccesser引用: 
   IRelationAccesser relationAccesser  =  dataAccesser.GetRelationAccesser( null );

   IRelationAccesser接口的完整定义如下,仅仅包含三个方法:
    public   interface  IRelationAccesser : ITransactionAccesser
    {
        
///   <summary>
        
///  DoCommand 执行数据命令
        
///   </summary>        
         void  DoCommand( string  command);

        
//  <summary>
         ///  DoQuery 执行查询数据
        
///   </summary>   
        DataSet DoQuery( string  query);

        
///   <summary>
        
///  ExcuteRegularQuery 执行带有参数的查询语句,参数值由paraValues给出。
        
///   </summary>        
        /// <param name="regularQuery">带参数的查询语句</param>
        /// <param name="paraPrefix">查询语句中参数的前缀,该前缀可以用户自定义</param>    
        /// <param name="paraValues">键为参数名,不带参数前缀</param>    
          
        DataSet ExcuteRegularQuery( string  regularQuery,  string  paraPrefix, IDictionary < string object >  paraValues);       
    }    
   假设,我们要进行一个联合查询,可以这样做:
   string  joinSelect  =   " SELECT ErrorDetail.*, TaskError.Location FROM ErrorDetail INNER JOIN TaskError ON ErrorDetail.ErrorID = TaskError.ID WHERE (TaskError.ID = '1') " ;
   DataSet ds 
=  relationAccesser.DoQuery(joinSelect);
   如果想使用参数化的查询,可以调用ExcuteRegularQuery方法,我们现在通过调用ExcuteRegularQuery方法来实现上面的功能:
   string  joinSelect  =   " SELECT ErrorDetail.*, TaskError.Location FROM ErrorDetail INNER JOIN TaskError ON ErrorDetail.ErrorID = TaskError.ID WHERE (TaskError.ID = @ID) " ;         
   
// 准备参数
    IDictionary < string object >  dic  =   new  Dictionary < string object > ();
   dic.Add(
" ID " 1 );//参数名不用带参数前缀
   
// 查询
   DataSet ds2  =  relationAccesser .ExcuteRegularQuery(joinSelect,  " @ " , dic);
   特别要注意的是,ExcuteRegularQuery方法中的paraPrefix参数用于表示查询语句中所使用的参数前缀,这个前缀用户可以自己指定,DataRabbit在执行前会自动将其转换为数据库所要求的参数前缀。比如,如果后台数据库是Oracle,上述语句的参数前缀“@”会被自动转换成Oracle所要求的前缀“:”。


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



   
目录
相关文章
|
2月前
|
Java 数据库
java面向对象高级分层实例_数据库操作类
java面向对象高级分层实例_数据库操作类
12 1
|
缓存 NoSQL Java
数据访问简介|学习笔记
快速学习数据访问简介
46 0
|
SQL 缓存 Oracle
1.NetDh框架之数据库操作层--Dapper简单封装,可支持多库实例、多种数据库类型等(附源码和示例代码)
1.NetDh框架开始的需求场景 需求场景: 1.之前公司有不同.net项目组,有的项目是用SqlServer做数据库,有的项目是用Oracle,后面也有可能会用到Mysql等,而且要考虑后续扩展成主从库、多库的需求。
3594 0
|
数据库连接 数据库 负载均衡
DataRabbit 轻量的数据访问框架(19)-- 读写分离与隔离级别
在高并发的系统中,我们常采用多数据库分散放置、读写分离、细粒度的隔离级别设定等策略来提高系统的性能。DataRabbit3.3 以及以上版本对这三种策略都给予了内置的支持。 (1)数据库分散放置:对于较大型的系统,在设计数据库时,我们可以根据业务范围将其设计为多个数据库,而不是一个,然后将这些数据库部署在不同的物理服务器上,以分担负载。
830 0
|
数据库 Java Spring
DataRabbit 轻量的ORM框架(17)-- 使用DataRabbit的最佳实践
在DataRabbit 轻量的数据访问框架(12)-- 将DataRabbit融入架构 一文中介绍了如何将DataRabbit与三层架构结合起来,但是,在实际的项目中,每一层是如何使用DataRabbit的了?本文将展示作者在项目中使用DataRabbit的标准做法。
689 0
|
数据库 关系型数据库 Oracle
DataRabbit 轻量的数据访问框架(09) -- IDataSchemaAccesser
(完全限定类名:DataRabbit.Schema.IDataSchemaAccesser)   在前面介绍的很多访问器的实现中,都不需要使用者提供任何关于数据库表结构的信息(比如,主键、主外键关系等),这是因为它们都借助于IDataSchemaAccesser来获取目标数据表的大纲信息,本文就来介绍如何使用DataRabbit框架中的IDataSchemaAccesser来访问和操作数据表的大纲。
867 0
|
缓存 数据库
DataRabbit 轻量的数据访问框架(01) -- ITransactionAccesser
(完全限定类名:DataRabbit.ITransactionAccesser)    在DataRabbit 轻量的数据访问框架 --序 中,我们已经知道,所有的访问器接口都继承了ITransactionAccesser接口。
961 0
DataRabbit 轻量的数据访问框架(04) -- IEntityRelationLoader
(完全限定类名:DataRabbit.ORM.IEntityRelationLoader)   在DataRabbit框架提供的ORM功能之中,除了IOrmAccesser接口展现的核心ORM功能外,IEntityRelationLoader接口也提供了一些有意义的功能。
781 0