Oracle用复杂查询写及SQL配置文件–SOD框架的SQL-MAP技术简介

引言

今收看同样片热门的博客, .NET高级工程师面试题的SQL篇
,要求找有各一个息息相关的最高分,并且按照有关编号,学生编号升序排列。这个查询比较复杂,也正如独立,自从用了ORM后,很漫长没写了SQL语句了,于是自己研究了下,自己也勾勒了一个:

 WITH cte1 as (
 select stu.deptID,
        D.depName, 
        stu.stuid ,
        stu.stuName,
        score_sum.AllScore
    from dbo.Student stu
      inner join (select stuid ,SUM(score) as AllScore from dbo.Score group by stuid) score_sum      
          on  stu.stuid =score_sum.stuid 
      inner join dbo.Department D on stu.deptID= D.depID
)
 select cte1.* from cte1 
      inner join (select deptID, max(AllScore) maxScore from cte1  group by deptID) M
            on cte1.AllScore = M.maxScore and cte1.deptID=M.deptID
 order by cte1.deptID,
          cte1.stuid

 

咱们工作负不时遇到类似的纷繁查询,但广大的做法是管其写到BLL程序中,也时有发生同学喜欢写于蕴藏过程中,它有什么问题啊?

  • 描绘到程序中,
    • 轻养成拼接SQL的习惯,
    • 以SQL语句零散的遍布及程序的一一地方,不好维护,
    • 并出或发安全题材;
  • 描绘及囤过程,
    • 假设多了啊不好维护,
    • 而程序调用不如直接调用SQL语句方便,
    • 部署的下还得部署这些囤积过程,系统上线复杂的时节,常常遗忘更新一两单存储过程。

而外,SQL语句不论写及程序中或写以仓储过程遭到,都来一个深酷之瑕疵,程序无法超越数据库平台!

设若将所有的SQL语句都集中管理在一个配置文件被,那么程序编制和维护、发布还设方便多,也容易超过数据库平台,甚至可以因这SQL配置文件,写单代码生成器,自动生成DAL层代码。
大名鼎鼎的 iBatis,MyBaits.Net
就是这样的作用,但她定义了同样效复杂的规则,配置起老复杂,项目或80%底日都于写查询配置,如果没有代码工具开发工作量大非常的。

本来,与MyBatis不均等的远在,SOD框架并无主张以品种之询问都为此SQL写到SqlMap文件,建议大家止以复杂的SQL查询写及SqlMap配置文件,一般品种立类复杂查询也尽管20%横,而对此80%底一般查询,使用ORM即可,框架而支持ORM与SqlMap技术,这是SOD框架的等同百般特征!

SQL-MAP–集中管理SQL查询

PDF.NET
SOD框架的SQL-MAP功能借鉴了iBaits的合计,但是大力简化其的安排并提供代码生成工具,可以自动化的姣好DAL代码生成,下面是它的做事进程:

Oracle 1

SOD框架提供了SqlMap配置文件管理器来管理与编辑SQL配置文件,然后经代码生成器生成DAL层代码,最后交SODk框架执行。

编制SQL配置文件,如果通过地方说的布工具来做,可以参见这首文章:

PDF.NET之SQL-MAP使用图解

而是以此序太老,一直从未创新,工具的下载地址是:

http://ft.codeplex.com/releases/view/65308

工具包含在此“集成开发工具”
内,通过菜单或者图标即可操作。下面是合二为一开发工具打开数据库并实施本文的询问的界面:

 

Oracle 2

 

SQL-MAP配置管理工具不顶好用,初家学习概念可以试一试试,但是一旦想纯运用,推荐下VS来描写这个SQL配置文件再度便民。本文将通往大家详细介绍这个过程。

平、编写SQL-MAP配置文件

1.1,建立SQL-MAP应用类型

一般来说图所示,新建一个
SqlMapDemo项目,在它其中先补加一个XML文件,文件命名为 SqlMap.config
,然后,找到地方的“集成开发工具”的装置目录,添加
SqlMap.xsd 文件。该文件特别重大,它是我们以VS里面编写XML文件能够有
智能提醒 的关键。

Oracle 3

 

加加了此XSD文件及项目后,还需把下面的情

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:noNamespaceSchemaLocation="SqlMap.xsd"  

在意:有关这详细内容,请参见《PDF.NET(PWMIS数据开发框架)之SQL-MAP目标和标准》。

1.2 使用XML智能提醒

拿地方的始末补充加到刚底SqlMap.config
文件中,这样,输入尖括号,或者输入空格,智能提醒内容就是出,如下所示:

Oracle 4

 

旋即是加上完整的SqlMap.config
文件,该公文了手写,在智能提醒的援助下,编写还是非常便利之。请留意安排文件内各个节点性之始末,详细内容要看上面链接的文书。注意,这里要为此
CDATA 来描写SQL查询。

Oracle 5

瞩目:如果假定履行得结果集的询问,需要在Sql-Map文件的命节点内用
Select 节点,并且要指明 ResultClass 的档次,它发生下几乎种植而选值:

  1. ValueType –结果为价值对象,比如Int,String之类的查询单值结果
  2. DataSet –数据集,默认
  3. EntityObject –单个实体类对象
  4. EntityList –实体类列表

留神:如果指定
ResultClass=”EntityObject” / ResultClass=”EntityList” ,那么要而说明
ResultMap 属性,表示结果而投到之现实项目,比如:

ResultClass=”EntityObject” ResultMap=”XXXNameSpace.YYYEntityClass”

至于这详细内容,请参见《PDF.NET(PWMIS数据开发框架)之SQL-MAP目标和标准》。

只顾:<Script > 配置节,出了产生Type表面数据库类型之外,还得产生 ConnectionString =”” Version=””
这样的内容,否则,下面的代码生成不可知非常成代码。

次、使用代码生成器

2.1 配置代码生成器

开拓PDF.NET集成开发工具,选择菜单
“配置”–SQL-MAP代码生成器配置,出现下面的界面:

当编排区域,鼠标右键菜单,启用用修,如果是第一蹩脚配置,请一定去配置文件内之汉语注释,否则配置文件格式无法甄别。

Oracle 6

此处关键安排SqlMap.config文件所在的总体路径,输出代码的目,以及命名空间等等。

编写好,在编辑区的鼠标右键菜单上,启用“保存文件”的功用。

2.2 生成代码

使上面配置不错,点击第二独工具栏的图标,就得自行调用处
PDFCodeMaker.exe 程序,读取配置文件信息,自动生成DAL代码文件,如下图:

Oracle 7

6

Oracle 8

后来,我们抬高刚才生成的DAL代码文件及品种遭到,如达到图。

其三、使用SqlMap配置文件

3.1 SqlMap配置文件之采取办法

SqlMap配置文件来2栽采取方法,

  • 于应用程序配置文件之AppSeting 配置节里面指定文件路径
  • 置至程序集文件作为资源文件使用

当本示例中,采用嵌入式编译的道,这样SQL语句的安全性更胜,并且支持一个路遭到利用多单SqlMap配置文件,但是不如作为独立文件使用修改好。如下图:

Oracle 9

这种措施编译,该资源文件之名便是
“程序集默认名字空间.目录名字.文件名字” ,这里的例子是
SqlMapDemo.SqlMap.config ,由于当跟目录下面,没有目录名字。

在意,要科学运用嵌入式SQL配置文件,还非得于该文件被指出”停放文件的次集名称,资源文件名字“,如本例如下图红色边框标记的组成部分所示:

 

Oracle 10

SqMap.config 文件修改完成后,在此启动 PDFCodeMaker.exe
程序,重新生成DAL文件,如下所示,增加了签入式文件的安装:

Oracle 11

3.2 生成SqlMapDAL文件

自我批评发现,DAL类文件的名空间不得法,这里修改下安排文件之 RootNameSpace
部分,如下图:

Oracle 12

再也生成DAL类文件,我们看最后生成的SqlMapDAL类的情节:

Oracle 13Oracle 14

//使用该程序前请先引用程序集:PWMIS.Core,并且下面定义的名称空间前缀不要使用PWMIS,更多信息,请查看 http://www.pwmis.com/sqlmap 
// ========================================================================
// Copyright(c) 2008-2010 公司名称, All Rights Reserved.
// ========================================================================
using System;
using System.Data;
using System.Collections.Generic;
using PWMIS.DataMap.SqlMap;
using PWMIS.DataMap.Entity;
using PWMIS.Common;

namespace SqlMapDemo.SqlMapDAL
{
/// <summary>
/// 文件名:TestSqlMapClass.cs
/// 类 名:TestSqlMapClass
/// 版 本:1.0
/// 创建时间:2015/5/12 17:16:32
/// 用途描述:SQL-MAP示例测试程序
/// 其它信息:该文件由 PDF.NET Code Maker 自动生成,修改前请先备份!
/// </summary>
public partial class TestSqlMapClass
    : DBMapper 
{
    /// <summary>
    /// 默认构造函数
    /// </summary>
    public TestSqlMapClass()
    {
        Mapper.CommandClassName = "TestGroup";
        //CurrentDataBase.DataBaseType=DataBase.enumDataBaseType.SqlServer;
        Mapper.EmbedAssemblySource="SqlMapDemo,SqlMapDemo.SqlMap.config";//SQL-MAP文件嵌入的程序集名称和资源名称,如果有多个SQL-MAP文件建议在此指明。
    }


    /// <summary>
    /// 找出每一个系的最高分,并且按系编号,学生编号升序排列
    /// </summary>
    /// <returns></returns>
    public DataSet QueryStudentSores( ) 
    { 
            //获取命令信息
            CommandInfo cmdInfo=Mapper.GetCommandInfo("QueryStudentSores");
            //执行查询
            return CurrentDataBase.ExecuteDataSet(CurrentDataBase.ConnectionString, cmdInfo.CommandType, cmdInfo.CommandText ,null);
        //
    }//End Function


}//End Class

}//End NameSpace 

SqlMapDemo.SqlMapDAL

3.3 团队开发

组织开支常常提到到文件修改冲突,SqlMap配置文件呢会遇到,如果大家不失去修改及一个Command配置,用源代码管理器的机关合并功能是没问题之。

一旦是独占式签出管理,那么一个开发人员使用SqlMap文件,另外一个即只有等了,但框架提供了变化的措施来缓解者题材。

  • 依功能模块划分DAL程序集,每个DAL程序集一个SqlMap.config文件,选择嵌入式编译;
  • 于一个DAL程序项目落得起多独SqlMap.config文件,选择嵌入式编译 。

在意:建议各级一个开发人员负责一个SqlMap.config文件的管理,然后分别安排好的PDFCodeMaker.exe.config

 

3.4 切换数据库

每当同一个SqlMap.config 文件里上加新的 <Script Type=””
节点,比如Oracle
,然后以原先数据库类型的SQL查询改写成当下档的SQL查询语句 ,程序会依据DBMapper的AdoHelper的实在类型自动选择是的<Script
Type=”” 节点,从而做到数据库切换,实现而的运用体系跨数据库的作用。

除此以外,也得另外建立一个SqlMap.config
文件,里面特别写新的数据库下面的SQL语句,我们先一个银行之档次,就是如此打SqlServer移植到PostgreSql的。

四、运行SQL-MAP程序

4.1 配置连接字符串

SQL-MAP DAL类程序依然通过AdoHelper
对象来实行,这里丰富一个应用程序配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings>
    <add name ="default" connectionString="Data Source=.;Initial Catalog=TestDB;Integrated Security=True" providerName="SqlServer"/>
  </connectionStrings>
</configuration>

4.2 运行程序

接下来,就好形容如下的代码来测试SQL-MAP程序了:

 class Program
 {
     static void Main(string[] args)
     {
         Console.WriteLine("PDF.NET SOD框架 SqlMap示例程序--2015.5.12-------");
         Console.WriteLine("http://www.pwmis.com/sqlmap ---------");

         SqlMapDemo.SqlMapDAL.TestSqlMapClass test = new SqlMapDAL.TestSqlMapClass();

         //AdoHelper db = new SqlServer();
         //取最后一个连接配置
         AdoHelper db = MyDB.GetDBHelper();
         //SQL-MAP DAL 默认也会取最后一个连接配置,所以下面一行代码可以注释
         //test.CurrentDataBase = db;
         DataSet data = test.QueryStudentSores();

         Console.WriteLine("查询到记录数量:{0}",data.Tables[0].Rows.Count);
         Console.WriteLine("测试完成。");
         Console.Read();
     }
 }

结果运行如下:

Oracle 15

安一个断点,我们来瞧 ”SQL-MAP DAL对象“的Mapper对象来怎么样内容:

Oracle 16

当当时窗口输入 test.Mapper
,回车,就只是视上面的情了。这里展示了方配置的SQL-MAP嵌入式文件之岗位与文书突出的门径:SqlMapFile
属性。

 下面是事无巨细的结果:

test.Mapper
{PWMIS.DataMap.SqlMap.SqlMapper}
    _CommandClassName: "TestGroup"
    _DataBase: {PWMIS.DataProvider.Data.SqlServer}
    _dataBaseType: SqlServer
    _embedAssemblySource: "SqlMapDemo,SqlMapDemo.SqlMap.config"
    _ParaChar: "@"
    _ParamsMap: {PWMIS.Common.ParamMapType[0]}
    _ParasLenth: 0
    _ResultClass: ValueType
    _ResultMap: ""
    _SqlMapFile: "@R://SqlMapDemo,SqlMapDemo.SqlMap.config"

 结语

测试完全正确,使用 SOD框架的SQL-MAP 技术是匪是雅粗略?

此起彼伏都仅仅需要修改下文件之中的SQL语句就实行了,

无异于坏布,一键生成!

就便是,SOD框架的SQL-MAP
技术之风味!结合SOD框架的ORM功能,它了好代表MyBatis.Net 。

感大家关注PDF.NET
SOD框架,这是一个开源免费之框架,详细信息请看官网
http://www.pwmis.com/sqlmap

框架开源项目地址:http://pwmis.codeplex.com
,本档示范代码已经签入到codeplex 上,大家可经过SVN下载使用。

本篇程序都提供了单身的下载:Oracle 17    
Sql-Map Demo

正文系视频播放以及下载,点击这里》》

相关文章