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
Git.Framework 框架随手记--SQL配置文件的使用的更多相关文章
- Git.Framework 框架随手记--存储过程简化
在很多的ORM中对存储过程操作都是一个棘手的地方,因为存储过程是一段预编译的代码,其中可以包含很多处理过程.在Git.Framework中也同样存在这样的问题,目前没有能力解决这个问题.但是对于存储过 ...
- Git.Framework 框架随手记--ORM条件组合
在上一篇<Git.Framework 框架随手记--ORM新增操作>中简单记录了如何对数据进行删除和修改,其用法都非常简单,在文章中提到了Where()方法,本文将详述Where() 等条 ...
- Git.Framework 框架随手记--ORM编辑删除
前面一篇文章<Git.Framework 框架随手记--ORM新增操作>主要讲解了如何使用Git.Framework往数据库中添加数据.其操作过程相对简单,本章主要记录如何编辑数据和修改数 ...
- Git.Framework 框架随手记--ORM项目工程
前面已经简单介绍过了该框架(不一定是框架),本文开始重点记录其使用过程.可能记录的内容不是太详尽,框架也可能非常烂,但是里面的代码句句是实战项目所得.本文非教唆之类的文章,也非批判之类的文章,更不是炫 ...
- Git.Framework 框架随手记--ORM新增操作
本篇主要记录具体如何新增数据,废话不多说,开始进入正文. 一. 生成工程结构 上一篇已经说到了如何生成工程结构,这里在累述一次. 1. 新建项目总体结构 使用VS新建项目结构,分层结构可以随意.我们使 ...
- Git.Framework 框架随手记--历史原因
Git.Framework 是近几年工作的一些工作经验总结,虽不能和某些知名的框架相提并论,但是还是比较实用的.此框架经过三年多的升级和维护,已经具有较强的实用性,在此记录该框架的使用操作方式,贡献给 ...
- Git.Framework 框架随手记--ORM查询数据集合 二
一. 分组查询 在SQL中使用Group By 来对数据分组,在实际中分组中一般与聚合函数一并使用.在Git.Framework中提供了相应的分组方法 DataTable Group(T entit ...
- Git.Framework 框架随手记-- 分享一个"比较垃圾"的项目
本文主要分享一个Git.Framework 开发的一个项目的部分源码,此项目代码"比较垃圾",所以请各位码农,码畜,码神,码圣勿喷!发此文只为记录工作问题以及分享问题! 一. 项目 ...
- Git.Framework 框架随手记--IIS7运行序列化问题
客户反馈系统又登录不了,这是最近几次连续出现相同的问题,从日志反应情况来看: 日志级别:[info] 日志位置:Git.Framework.Resource.ResourceManager 日志时间: ...
随机推荐
- gdb调试常用命令
gdb 调试常用命令 gcc -g mian.c -o main.out -o (定制生成的可执行文件的名称,缺省时为a.out) -g 使gdb可调试,在编译的时候,产生调试信息 gdb main. ...
- mysql日志类型
在MySQL中共有4中日志:错误日志.二进制日志.查询日志和慢查询日志 一.错误日志 错误日志名 host_name.err,并默认在参数DATADIR指定的目录中写入日志文件.可使用 --log-e ...
- Hive2 jdbc test
package andes; import java.io.BufferedWriter; import java.io.FileOutputStream; import java.io.IOExce ...
- [转]asp.net解决高并发的方案.
本文转自:http://www.cnblogs.com/qq75077027/archive/2012/11/27/2791703.html 最近几天一直在读代震军的博客,他是Discuz!NT的设计 ...
- 如何用ZBrush快速雕刻LOL中的Lissandra
话说<魔兽>还有1天就上映了,热爱这款游戏的你想必早已按耐不住了吧,别急,再耐心等一下.不过今天我们要讲的,不是魔兽,而是另一款很多人为 之疯狂的游戏—英雄联盟,也就是你们熟悉的LOL啦, ...
- 边工作边刷题:70天一遍leetcode: day 82
Closest Binary Search Tree Value 要点: https://repl.it/CfhL/1 # Definition for a binary tree node. # c ...
- 第一次使用Android Studio时你应该知道的一切配置(三):gradle项目构建
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- uGUI练习(五) Draggable Object
练习目标 学习制作一个可拖动的UI 一.步骤 监听UI的Drag事件,需要我们写一点点的代码. 1.创建一个Panel ,设置size为(100,100) 2.创建DraggableObjectSce ...
- Unity-WIKI 之 DebugLine
脚本功能 在Unity中要使用画线功能,需要添加LineRenderer 组件,或打开Gizmos功能,下面这个组件为开发带来了方便 功能预览 搭建步骤 1.创建“Plugins” 文件夹 2.在“P ...
- Unity3d 内置图形界面系统(Editor GUI)
一.说在前面的 1.unity内置的ui系统,无论是在性能的表现上.功能的强大性上.制作复杂ui的便捷性上,还是其它的一些方面都不如一些第三方的插件来的好,如:NGUI和DF-GUI(PS: 后者比前 ...