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 

时间: 2024-10-23 08:06:50

Git.Framework 框架随手记--SQL配置文件的使用的相关文章

Git.Framework 框架随手记--存储过程简化

在很多的ORM中对存储过程操作都是一个棘手的地方,因为存储过程是一段预编译的代码,其中可以包含很多处理过程.在Git.Framework中也同样存在这样的问题,目前没有能力解决这个问题.但是对于存储过程的一些外围操作目前还是可以支持的. 上一篇文章简单回顾地址,可能对了解本文有益: Git.Framework 框架随手记--SQL配置文件的使用 一. 结构简单说明 在前面操作基本SQL的时候我们已经知道使用对象模型映射其相关的表,一些基本的操作我们都能够实现完成.在很大的程度上完成了抽象工作,在

Git.Framework 框架随手记--ORM条件组合

在上一篇<Git.Framework 框架随手记--ORM新增操作>中简单记录了如何对数据进行删除和修改,其用法都非常简单,在文章中提到了Where()方法,本文将详述Where() 等条件函数.   一. SQL 条件分析 对于SQL每个人应该都很熟悉,这是基础的基础,如果没有使用过SQL的本文可以直接忽略了.先简单看看一个SQL语句,我们根据SQL语句的规则理解Where()方法 SELECT [ID],[UserName],[PassWord],[UserCode],[RealName]

Git.Framework 框架随手记--历史原因

  Git.Framework 是近几年工作的一些工作经验总结,虽不能和某些知名的框架相提并论,但是还是比较实用的.此框架经过三年多的升级和维护,已经具有较强的实用性,在此记录该框架的使用操作方式,贡献给公司第一线开发的技术人员们,感谢你们所付出的努力.   一. 框架由来 前几年我都是在互联网公司工作,做什么大型B2B,B2C网站.至于有多大就不提了,但是在其间做开发人员使用的技术的确比较辛苦,那个时候公司使用的技术还比较落后,最起码我是这么认为的,开发效率很低,一层不变的开发模式,Copy到

Git.Framework 框架随手记--ORM新增操作

本篇主要记录具体如何新增数据,废话不多说,开始进入正文. 一. 生成工程结构 上一篇已经说到了如何生成工程结构,这里在累述一次. 1. 新建项目总体结构 使用VS新建项目结构,分层结构可以随意.我们使用的结构如下: 2. 引入配置文件相关 Configs文件夹中的配置文件,其目录结构如下图: 以上几个文件为必须的,除了最下面的画红线的为自定义可以修改,具体配置项内容可以参考前面几篇文章.然后再web.config定义如下配置: <appSettings> <add key="D

Git.Framework 框架随手记--ORM查询数据集合 二

一.  分组查询 在SQL中使用Group By 来对数据分组,在实际中分组中一般与聚合函数一并使用.在Git.Framework中提供了相应的分组方法 DataTable Group(T entity); DataTable Group(T entity, bool isOpenTrans); IEnumerable<System.Linq.IGrouping<TKey, T>> Group<TKey>(T entity, Func<T, TKey> ke

Git.Framework 框架随手记--ORM查询数据集合 一

本文记录Git.Framework之ORM中最为浓墨重彩的一篇,查询集合.根据自己做的项目统计这个是使用频率最高的一个.   一. 查询集合方法简介 (1)List<T> GetList(); (2)List<T> GetList(bool isOpenTrans); (3)List<T> GetList(T entity); (4)List<V> GetList<V>(T entity) where V : class, new(); (5)L

Git.Framework 框架随手记--IIS7运行序列化问题

客户反馈系统又登录不了,这是最近几次连续出现相同的问题,从日志反应情况来看: 日志级别:[info] 日志位置:Git.Framework.Resource.ResourceManager 日志时间:2014/12/3 9:08:30 日志内容:反序列化异常:Unable to generate a temporary class (result=1). error CS1567: Error generating Win32 resource: 另一个程序正在使用此文件,进程无法访问. 日志级

Git.Framework 框架随手记--ORM查询返回实体对象

使用ORM有一个优势,可以通过某种机制将数据库中的数据转化为自己想要的对象形式数据.本章记录一下如何使用Git.Framework返回实体对象   一. Git.Framework 中提供的方法 在Git.Framework中有七个方法可以返回实体对象,先简答的看看这里的方法描述 (1) T GetSingle(int id); (2) T GetSingle(object value); (3) T GetSingle(T entity); (4) V GetSingle<V>(T enti

Git.Framework 框架随手记--准备工作

前面已经提到过了本框架的由来,时至今日该框架已经和最初版本有了天壤之别.因为仍有部分代码是采用原有的框架,所以本框架也算不上原创,只是在原有的基础上不断的改进,所以希望了解此框架的人不要过多的指责. 一. 配置数据库连接 在该框架中自定义了一个配置文件Database.config, 这个配置文件的根节点为<databaseList></databaseList>, 其可以包含多个子节点用于配置数据库的配置连接,具体代码如下: <?xml version="1.0&