PDF.NET(PWMIS数据开发框架)之SQL-MAP目标和规范

SQL-MAP的目标:

  1. 集中管理SQL语句,所有SQL语句放在专门的配置文件中进行管理;
  2. 通过替换SQL配置文件,达到平滑切换数据库到另外一个数据库,比如从Oracle的应用移植到SQLSERVER;
  3. 由DBA来写程序,对于复杂的查询,DBA写的SQL语句和存储过程更有保障更有效率,SQL-MAP工具让DBA也能够写.NET程序;
  4. 代码自动生成,由于在SQL配置文件中指定了很多编程特性,所以可以使用专用工具将配置文件映射到.NET代码;

PDF.NET 数据开发框架介绍(含实例程序下载)请看:

http://www.pwmis.com/sqlmap

SQL-MAP代码工具的详细使用介绍(图解)请看: http://www.pwmis.com/sqlmap/toolshelp.htm ---------------------- SQL-MAP的规范: 1,通用配置:

SqlMap 配置节

EmbedAssemblySource 属性:要将本文将嵌入的程序集名称和资源文件名称,格式为: 程序集名称,默认命名空间.文件名.扩展名

如果要将配置文件作为嵌入式文件编译,请指定该项值。该配置主要指导代码生成器生成相应的代码信息。

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

将这句话加入到这里,可以使得SqlMap配置文件编写的时候具有智能提示。需要在当前目录下有sqlmap.xsd 文件。

2,节点类型

SQL-MAP的数据CRUD操作类型(CommandClass 的子节点类型):           Select/Read:   选取数据操作;,           Update:         更新数据操作;           Insert/Create:新增数据操作;           Delete:          删除数据操作。

 3,节点属性:

注:<>表示必选属性,[]表示可选属性    <CommandName>:查询的名字,对应于SqlMap数据实体类中的方法名;    <CommandType>:查询命令类型,值为Text,StoredProcedure,TableDirect    [ParameterClass]:查询参数类,在SQLMap 中表示为一个参数类;    <#ParaName[:System.Type[,System.DbType[,Size[,ParameterDirection[,Precision,Scale]]]]]#>:      ParaName:查询语句中对应的参数名,如果名称前缀有 @@ 标记,表示该参数是一个替换参数,将忽略后面的定义;      System.Type:可选,符合CSL规范的类型(CLT)名称;      System.DbType:可选,符合DbType 的枚举,如 AnsiString 等;      Size:可选,表示参数长度;      ParameterDirection:可选,表示参数的输入输出类型的枚举值      Precision:可选,表示参数的数据精度,通常用于Decimal类型      Scale:可选,表示参数的数据小数位,通常用于Decimal类型

{附注:

常用CLT:Byte,Int16,Int32,Int64,Single,Double,Boolean,Char,Decimal,String [关于通用类型系统(CLT):ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconthecommontypesystem.htm ] [DbType 枚举:ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfSystemDataDbTypeClassTopic.htm ] }

    <Script > 配置节,除了有Type表面数据库类型之外,还必须有 ConnectionString ="" Version="" 这样的内容,否则,PdfCodeMaker.exe 代码生成不能生成代码文件。    <ResultClass>:Select 查询的结果类型,        如果返回单值的查询,请指定 为 ResultClass="ValueType";        如果返回多个行结果集,可以指定 ResultClass="DataSet",将以System.Data.DataSet的方式填充;                                 也可以指定 ResultClass="EntityObject",那么将结果填充到实体类中;                                 或者指定 ResultClass="EntityList",那么将结果填充到实体类列表(集合)中。        注意:Insert/Update/Delete 操作类型不需要指定该属性。    <ResultMap>:仅仅在ResultClass="EntityObject" / "EntityList" 有效,表示实体类查询结果映射;                    通常表示返回单行(也可返回多行)记录到一个数据实体对象的映射;                    例如 要将结果集影射到一个名为 UserInfo 的自定义实体类中,注意必须使用类的全名称:                    ResultClass="EntityObject" ResultMap="MyDAL.UserInfo"

  [SqlPage]:是否允许SqlMap分页,默认是False。该属性仅供代码生成器使用,不过目前的代码生成器还没有提供这样的功能。

                  开启该属性之后,在SqlMapDAL类的方法中,参数中需要增加一个分页信息数组,并且调用CommandInfo对象的SetPageInfo方法,如下面的实例代码(红色的部分为需要增加的代码):

/// <summary>
        /// 返回成交明细(带分页)
        /// </summary>
        /// <param name="WhereString">查询条件</param>
        /// <param name="pageInfo">设置分页信息,pageInfo[ 0]=记录数量,pageInfo[ 1]=页码,pageInfo[ 2]=页大小</param>
        /// <returns></returns>
        public DataSet GetTradeList(string WhereString, int[] pageInfo )
        {
            //获取命令信息
            CommandInfo cmdInfo = Mapper.GetCommandInfo("GetTradeList");
            //执行参数替换
            cmdInfo.SetParameterValue("WhereString", WhereString, enumParamType.ReplacedText);
            cmdInfo.SetPageInfo(pageinfo);
            //执行查询
            return CurrentDataBase.ExecuteDataSet(CurrentDataBase.ConnectionString, cmdInfo.CommandType, cmdInfo.CommandText, null);
            //
        }//End Function

注意:你可以为你现有的SqlMapDAL方法增加一个重载,把这个重载的代码放入一个分部类文件中,这样就不用担心代码生成器的影响了。

   4,版本记录:                   ver 1.0.2 修改:    支持同名参数,如果脚本中有多个同名参数,那么首先处理遇到的第一个参数,忽略后面的同名参数定义;    支持参数“字符串替换”,用于提供构造复杂动态SQL的支持,参数名用 % % 分割,      例如 : Where #%WhereString%# 或者 Where # %WhereString% # ,系统忽略空白字符。    ver 4.0 修改:    <SqlPage>:仅仅在 SqlPage="True" 的时候,代码生成器将生成支持分页的DAL代码,具体过程就是在原有参数    的最后增加一个可选参数 params int[] pageInfo,并在方法体中增加  cmdInfo.SetPageInfo (pageInfo ) 语句。

SQL-MAP生成工具

1,在VS的IDE中使用XSD:

根据该规范写了一个检查配置文件格式的XSD,文件地址:

http://files.cnblogs.com/bluedoctor/SqlMap.xsd.xml

由于博客园不允许上传XSD格式的文件,所以大家下载这个文件以后把.xml后缀名去掉即可。

在编写SQL-MAP配置文件的时候,在VS2008的菜单 “XML”-〉“架构”里面,选择这个文件即可。这样编写配置文件就可以有智能提示了。

注意:如果下载了PDF.NET集成开发工具,在工具的安装目录下面,也有这个sqlmap.xsd 文件。

2,使用SQL-MAP配置管理器:

这是一个可视化的编辑程序,可以在PdfNet集成开发工具中找到,也可以在之前版本的示例程序包中找到。

下图是一个SqlMap配置文件跟程序结构的示意图:

这个图例中,SqlMap.config 文件在SqlMapDAL目录下,因此将这个文件潜入式编译的时候,它在程序集中的全名称是“程序集默认命名空间.SqlMapDAL.SqlMap.config” ,注意这个名字对大小写敏感。EmbedAssemblySource的前面内容部分 “GroupStatistics.Repostitory” 是当前程序集的名称。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java学习网

Java开发之使用Java 8 Streams 对数据库进行 CRUD 操作

Speedment 是一个开放源代码的工具集,它可以被用来生成 Java 实体,并且能将我们同数据库的通信过程管理起来。你可以利用一个图形工具连接到数据库并生成...

1073
来自专栏玄魂工作室

看代码学安全(7 )- parse_str函数缺陷

--------------------------------------------------------------------------------...

1121
来自专栏ml

------------数据库的加锁操作(上)

       从事一个项目,需要考虑数据的安全性,之前对于数据库这部分的数据操作学习的比较零散,由于手头的项目,于是系统的 学习了下数据库操作加锁的知识: --...

48610
来自专栏大内老A

在Entity Framework中使用存储过程(四):如何为Delete存储过程参数赋上Current值?

继续讨论EF中使用存储过程的问题,这回着重讨论的是为存储过程的参数进行赋值的问题。说得更加具体一点,是如何为实体映射的Delete存储过程参数进行赋值的问题。关...

2229
来自专栏智能大石头

5,ORM组件XCode(动手)

本篇才真正是XCode教程第一篇。《速览》是为了以最简洁的语言最短小的篇幅去吸引开发者;《简介》则是对XCode组件和XCode开发模式的一个整体介绍,让开发者...

2149
来自专栏Kevin-ZhangCG

[ SSH框架 ] Hibernate框架学习之二

1925
来自专栏架构专栏

阿里最全面试116题:阿里天猫、蚂蚁金服、阿里巴巴面试题含答案

1. junit用法,before,beforeClass,after, afterClass的执行顺序

2134
来自专栏MasiMaro 的技术博文

派遣函数

驱动程序的主要功能是用来处理IO请求,而大部分的IO请求是在派遣函数中完成的,用户模式下所有的IO请求都会被IO管理器封装为一个IRP结构,类似于Windows...

1331
来自专栏JetpropelledSnake

SQL学习之SQL注入总结

2983
来自专栏我的博客

Tp3.1.2模型学习

1.模型定义 命名规则是除去表前缀的数据表名称,采用驼峰命名,并且首字母大写,然后加上后缀Model 其中tableName是不包含表前缀的数据表名称,一般用...

3434

扫码关注云+社区

领取腾讯云代金券