zoukankan      html  css  js  c++  java
  • Git.Framework 框架随手记--SQL配置文件的使用

      前面几篇文章讲到了如何使用框架进行简单结构的增删改查操作,由于个人能力有限在对于复杂的SQL操作面前也是无能为力,只能自己动手来写SQL语句。在Git.Framework中提供了一个公共的接口来直接操作SQL语句。

      一. SQL配置文件的结构简介

        在这个框架中提供了单独的配置文件用于来管理SQL语句,当然也可以不用配置文件。使用SQL配置文件系统在启动的时候会直接将SQL配置文件转化为Command对象缓存,而不用后期再去创建,这是一个比较不错的优势。下面先看看SQL配置文件的结构

    <dataOperations>
      <dataCommand name="User.UpdateAllBase" database="JooShowGit" commandType="Text">
        <commandText>
          <![CDATA[
           SQL语句
            ]]>
        </commandText>
        <parameters>
          <param name="@UserId" dbType="Int32" direction="Input"/>
        </parameters>
      </dataCommand>
    </dataOperations>
    配置文件基本结构

        上面的代码是一个简单的结构模式,dataOperations 是根节点,下面可以包含多个dataCommand节点。而在commandText中可以配置任意的SQL语句。在框架中建议使用占位符参数来代替输入参数和输出参数,而节点parameters 节点就是用于来配置占位符参数的,如果SQL语句中没有占位符参数则可以不用配置param节点(parameters节点下面没有子节点了)。

        dataCommand的属性name在所有的SQL配置文件中是唯一的,这里有个非常不好的就是不能自动盘点节点名称是否已经存在了。 database则是指定数据库连接name 。

        commandType则是指定SQL语句的类型,包括三个值: Text,StoredProcedure,TableDirect 具体什么含义ADO.NET的都知道。

        Param的具体配置项如下:

        name: 占位符名称,这里要注意@+名称 , 在MySQL或者Oracle中可能稍有不同

        dbType: 用于指定占位符输入参数类型,具体可以赋值内容如下:

    <xs:enumeration value="AnsiString" />
    <xs:enumeration value="Binary" />
    <xs:enumeration value="Boolean" />
    <xs:enumeration value="Byte" />
    <xs:enumeration value="Currency" />
    <xs:enumeration value="Date" />
    <xs:enumeration value="DateTime" />
    <xs:enumeration value="Decimal" />
    <xs:enumeration value="Double" />
    <xs:enumeration value="Int16" />
    <xs:enumeration value="Int32" />
    <xs:enumeration value="Int64" />
    <xs:enumeration value="SByte" />
    <xs:enumeration value="Single" />
    <xs:enumeration value="String" />
    <xs:enumeration value="StringFixedLength" />
    <xs:enumeration value="AnsiStringFixedLength" />
    <xs:enumeration value="Time" />
    <xs:enumeration value="UInt16" />
    <xs:enumeration value="UInt32" />
    <xs:enumeration value="UInt64" />
    <xs:enumeration value="VarNumeric" />
    <xs:enumeration value="Xml" />
    数据类型可以输入值

        direction 则是占位符参数类型,在ADO.NET中有输入参数,输出参数,输入输出参数等,在这里也提供了相应的映射对应关系,具体可赋值内容如下:

    <xs:enumeration value="Input" />
    <xs:enumeration value="InputOutput" />
    <xs:enumeration value="Output" />
    <xs:enumeration value="ReturnValue" />
    占位符参数类型可输入值

         一个这样的配置文件中可以配置多个节点,唯一要注意的就是name的名称不能一样,否则会报错。我们可以新建多个这样的配置文件。看一个简单的案例配置

    <?xml version="1.0" encoding="utf-8" ?>
    <dataOperations>
    
      <!--User_Base所有字段的修改-->
      <dataCommand name="User.UpdateAllBase" database="JooShowGit" commandType="Text">
        <commandText>
          <![CDATA[
           UPDATE [User]
           SET [UserName] = @UserName
              ,[Email] = @Email
              ,[Password] = @Password
              ,[RegisterDate] = @RegisterDate
              ,[RegisterIp] = @RegisterIp
              ,[Status] = @Status
              ,[RegisterApplicationID] = @RegisterApplicationID
              ,[ActiveDate] = @ActiveDate
              ,[LastLoginDate] = @LastLoginDate
              ,[LastLoginApplicationID] = @LastLoginApplicationID
              ,[RegisterSource] = @RegisterSource
              ,[AuditStatus] = @AuditStatus
              ,[IsLogin] = @IsLogin
              ,[LoginCount] = @LoginCount
              ,[LastLoginIp] = @LastLoginIp
              ,[AuditUser] = @AuditUser
              ,[AuditDate] = @AuditDate
              ,[IsDeleted] = @IsDeleted
              ,[OLDApplicationID] = @OLDApplicationID
              ,[OLDID] = @OLDID
              ,[RowGuid] = @RowGuid
              ,[IMNum] = @IMNum
              ,[Phone] = @Phone
              ,[IsEmailValidate] = @IsEmailValidate
              ,[IsPhoneValidate] = @IsPhoneValidate
              ,[StepNum] = @StepNum
              ,[SaleCode]=@SaleCode
              ,[PasswordIM]=PasswordIM
              ,[ActiveIP]=@ActiveIP
              ,[CompanyType]=@CompanyType
                Where UserId=@UserId
            ]]>
        </commandText>
        <parameters>
          <param name="@UserId" dbType="Int32" direction="Input"/>
          <param name="@UserName" dbType="String" direction="Input"/>
          <param name="@Email" dbType="String" direction="Input"/>
          <param name="@Password" dbType="String" direction="Input"/>
          <param name="@RegisterDate" dbType="DateTime" direction="Input"/>
          <param name="@RegisterIp" dbType="String" direction="Input"/>
          <param name="@Status" dbType="Int32" direction="Input"/>
          <param name="@RegisterApplicationID" dbType="Int32" direction="Input"/>
          <param name="@ActiveDate" dbType="DateTime" direction="Input"/>
          <param name="@LastLoginDate" dbType="DateTime" direction="Input"/>
          <param name="@LastLoginApplicationID" dbType="Int32" direction="Input"/>
          <param name="@RegisterSource" dbType="Int32" direction="Input"/>
          <param name="@AuditStatus" dbType="Int32" direction="Input"/>
          <param name="@IsLogin" dbType="Int16" direction="Input"/>
          <param name="@LoginCount" dbType="Int32" direction="Input"/>
          <param name="@LastLoginIp" dbType="String" direction="Input"/>
          <param name="@AuditUser" dbType="String" direction="Input"/>
          <param name="@AuditDate" dbType="DateTime" direction="Input"/>
          <param name="@IsDeleted" dbType="Int16" direction="Input"/>
          <param name="@OLDApplicationID" dbType="Int32" direction="Input"/>
          <param name="@OLDID" dbType="Int32" direction="Input"/>
          <param name="@RowGuid" dbType="String" direction="Input"/>
          <param name="@IMNum" dbType="String" direction="Input"/>
          <param name="@Phone" dbType="String" direction="Input"/>
          <param name="@IsEmailValidate" dbType="Int32" direction="Input"/>
          <param name="@IsPhoneValidate" dbType="Int32" direction="Input"/>
          <param name="@StepNum" dbType="Int32" direction="Input"/>
          <param name="@SaleCode" dbType="String" direction="Input"/>
          <param name="@PasswordIM" dbType="String" direction="Input"/>
          <param name="@ActiveIP" dbType="String" direction="Input"/>
          <param name="@CompanyType" dbType="Int32" direction="Input"/>
        </parameters>
      </dataCommand>
    
    
      <dataCommand name="User.GetCount" database="JooShowGit" commandType="Text">
        <commandText>
          <![CDATA[
            SELECT COUNT(*) FROM Admin
            ]]>
        </commandText>
        <parameters>
          
        </parameters>
      </dataCommand>
    
    </dataOperations>
    配置文件案例展示

      二. 如何管理配置文件

        在框架中如果简单的配置以上配置文件是不能够被系统识别的,我们还需要将这些配置文件统一管理起来,在系统中提供了另外一个配置文件用于管理这些配置文件。其结构如下:

    <?xml version="1.0" encoding="utf-8" ?>
    <dataCommandFiles>
      <file name="DbVnPageRequestCommand.config"/>
    </dataCommandFiles>  

        不用惊讶,就是简单;将SQL的配置文件添加到配置节点dataCommandFiles中,在系统加载的时候会自动去寻找这些配置文件,只有包含了的配置文件才会加载读取识别。这里要说明一下这里面的配置文件都是config后缀结尾的。而管理SQL配置文件的配置文件的名称为DbCommandFiles.config,如何去加载这个文件我们需要在web.config 文件或者app.config 文件中去配置。

    <appSettings>
        <add key="DatabaseListFile" value="/Configs/Data/Database.config"/>
        <add key="DataCommandFile" value="/Configs/Data/DbCommandFiles.config"/>
    </appSettings>

        这个我们已经在前面讲过了,必须这样处理否则不能读取配置文件也不能够连接数据库。

      三. 如何使用

        在前面一系列都是讲述的如何使用对象关系直接操作数据库,这里先看一段代码回顾一下内容:

    IAdmin provider = new AdminDataAccess();
    List<AdminEntity> listResult = provider.GetList();
    
    Action<List<AdminEntity>> action = (items) => 
    {
           if (!items.IsNullOrEmpty())
          {
                 foreach (AdminEntity item in items)
                 {
                      Console.WriteLine(item.UserName);
                 }
          }
    };
    
    action(listResult);
    使用自带方法查询案例

        上面使用GetList() 查询了表Admin中的所有数据,使用这种方式非常简单而且实用,当时往往我们很多情况下SQL非常复杂,我们使用此种方式不能够完成其操作,需要我们自己写SQL语句。上面一直都是讲述如何使用自定义SQL语句查询。看看如下代码:

        (1) 先配置一个SQL语句

    <dataCommand name="User.GetALL" database="JooShowGit" commandType="Text">
        <commandText>
          <![CDATA[
              SELECT [ID]
                ,[UserName]
                ,[PassWord]
                ,[UserCode]
                ,[RealName]
                ,[Email]
                ,[Mobile]
                ,[Phone]
                ,[CreateTime]
                ,[CreateIp]
                ,[CreateUser]
                ,[LoginCount]
                ,[Picture]
                ,[UpdateTime]
                ,[IsDelete]
                ,[Status]
                ,[DepartNum]
                ,[ParentCode]
                ,[RoleNum]
                ,[Remark]
            FROM [JooShowGit].[dbo].[Admin]
            ]]>
        </commandText>
        <parameters>
          
        </parameters>
      </dataCommand>
    SQL语句配置

        (2)将SQL语句的配置文件添加到D币CommandFiles.config文件中,上面展示过了不在贴代码

        (3)获取Command对象,以及执行查询操作

    IAdmin provider = new AdminDataAccess();
                List<AdminEntity> listResult = provider.GetList();
    
                Action<List<AdminEntity>> action = (items) => 
                {
                    if (!items.IsNullOrEmpty())
                    {
                        foreach (AdminEntity item in items)
                        {
                            Console.WriteLine(item.UserName);
                        }
                    }
                };
    
                action(listResult);
    
                DataCommand command = DataCommandManager.GetDataCommand("User.GetALL");
                List<AdminEntity> list = command.ExecuteEntityList<AdminEntity>();
                action(list);
    执行相应的操作

        上面的代码首先是得到了一个DataCommand对象,这个对象是根据xml文件生成的,而且是在系统缓存中获取。

    DataCommand command = DataCommandManager.GetDataCommand("User.GetALL");

        这段代码会自动寻找到User.GetALL的这个配置节点,读取其中的SQL语句

    List<AdminEntity> list = command.ExecuteEntityList<AdminEntity>();

        这个是系统框架的底层实现了,将读取的数据流转化为对象集合

        修改带参数的配置节点如下:

    <dataCommand name="User.GetALL" database="JooShowGit" commandType="Text">
        <commandText>
          <![CDATA[
              SELECT [ID]
                ,[UserName]
                ,[PassWord]
                ,[UserCode]
                ,[RealName]
                ,[Email]
                ,[Mobile]
                ,[Phone]
                ,[CreateTime]
                ,[CreateIp]
                ,[CreateUser]
                ,[LoginCount]
                ,[Picture]
                ,[UpdateTime]
                ,[IsDelete]
                ,[Status]
                ,[DepartNum]
                ,[ParentCode]
                ,[RoleNum]
                ,[Remark]
            FROM [JooShowGit].[dbo].[Admin] WHERE [UserName]=@UserName
            ]]>
        </commandText>
        <parameters>
          <param name="@UserName" dbType="String" direction="Input"/>
        </parameters>
      </dataCommand>
    带有占位符参数的配置

        如何传入参数代码如下:

    DataCommand command = DataCommandManager.GetDataCommand("User.GetALL");
    command.SetParameterValue("@UserName", "administrator");
    List<AdminEntity> list = command.ExecuteEntityList<AdminEntity>();

        案例下载地址如下: http://pan.baidu.com/s/1o6mFO50    如果对此有兴趣了解可以加群:  88718955 

  • 相关阅读:
    lamp架构之升级php版本
    Linux常用命令大全
    Mysql表连接查询
    PHP练习题三
    PHP练习题二
    php 设计模式
    LAMP环境搭建教程
    Storm入门(四)WordCount示例
    Storm入门(三)HelloWorld示例
    Storm入门(一)原理介绍
  • 原文地址:https://www.cnblogs.com/qingyuan/p/3737598.html
Copyright © 2011-2022 走看看