zoukankan      html  css  js  c++  java
  • DMSFrame 之简单用法(一)

    1.DMSFrame是一个完整的ORM框架,框架相对来说也比成熟了。使用上有些地方还是比较方便的。DLL文件大约300K左右,但却可以支持各种方式的查询,完全的LINQ化的方式书写代码,更有利于维护。

    2.框架完全支持调试时生成的SQL语句跟踪,你可以很清晰地看出是哪里的写法出了问题。

    3.框架附加了完全支持查询SQL的写法。更有效的解决复杂的SQL的问题

    先上代码尝尝先吧:

    1 var query = DMS.Create<Adm_User>().Where(q => q.UserID == 1).ToEntity();

    生成SQL参数如下:

    SELECT [t0].[UserID],[t0].[UserName],[t0].[TrueName],[t0].[UserPwd],[t0].[DeptID],[t0].[DeptName],[t0].[UserCode],[t0].[CompanyEmail],[t0].[MobileNum],[t0].[StatusFlag],[t0].[LastLoginTime],[t0].[LoginTimes],[t0].[LastLoginIp],[t0].[ResetPwdFlag],[t0].[CreateTime],[t0].[CreateUser],[t0].[DeleteFlag],[t0].[DeleteTime],[t0].[DeleteUser],[t0].[UpdateUser],[t0].[UpdateTime],[t0].[Remark]
     FROM [Adm_User]  AS  [t0] WITH(NOLOCK)  
     WHERE ([t0].[UserID] = @p0)
    ParameterName:@p0 Value:1 DbType:Int32
    

     可以看出生成的查询语句,会自动将参数信息自动转化为Parameter,这样也有效杜绝SQL注入式攻击

    WITH(NOLOCK)这个功能是后续添加的功能,稍候会补充哪里可以修改时面的内容


    回到DMS当中,我们可以看到参数说明信息


    Create方法有四个参数信息

    string bDataBase, bool bNeedParams, bool bWithLock, bool bNeedQueryProvider

    相关说明:

    /// <summary>
            /// DMS查询引擎创建
            /// </summary>
            /// <typeparam name="T">类型参数必须是引用类型;这一点也适用于任何类、接口、委托或数组类型。</typeparam>
            /// <param name="bDataBase">数据库名称</param>        
            /// <param name="bNeedParams">否使用参数形式生成SQL</param>
            /// <param name="bWithLock">是否反向定义WITH(NOCLOCK)</param>
            /// <param name="bNeedQueryProvider"></param>
            /// <returns>DMS^T</returns>
    

    1.Create可以加入bDataBase数据库名称,此参数会自动在表上面加入数据库的说明,默认为空(暂只测试过MSSQL)

    2.bNeedParams是否使用参数的形式去解析SQL,默认为true

    3.bWithLock 是否反向定义生成With(nolock)字段,这个是根据数据库配置去生成些查询方式的,默认为false,如果为true,数据库配置XML如果设置成需要nolock的话,刚这里就不会生成,反之亦然。

    4.bNeedQueryProvider此参数本身是为了做列权限去写的框架,具体使用后续说明。。。。

    那我们查询一些更复杂的例子呢

    var query = DMS.Create<Adm_User>()
                    .Where(q => q.UserName.Like("admin"))
                    .Select(q => q.Columns(q.UserID, q.UserName))

    解析如下:

    SELECT [t0].[UserID],[t0].[UserName]
     FROM [Adm_User]  AS  [t0] WITH(NOLOCK)  
     WHERE ([t0].[UserName] LIKE @p0)
    ParameterName:@p0 Value:%admin% DbType:AnsiString

    可以看出Where条件里面支持很多最基本的查询,此处注意q.Columns这个写法也是区别Linq的一些写法的。如EF框架就不是这么写的。

    目前Where条件方法支持有 GreaterThan | >, GreaterThanOrEqual | >=,LessThan | <,LessThanOrEqual | <=,Like | like %$%, NotLike | not like %$%,

    BeginWith | like $%,FinishWith | like %$,In | in(params [] array),NotIn | not in查询的方法

    基本上大部分的方法在这里都是支持的。GreaterThan 这些大于小于方法适用于string类型,如果是数字类型,比如int,是可以直接使用 > < 号的

    另:Where条件字段支持:IsNull | IS NULL, IsNotNull | IS NOT NULL, Replace | Replace(MSSQL),Substring | Substring(MSSQL),NewID | NEWID(),

    等特殊方法。

    var query = DMS.Create<Adm_User>()
                    .Where(q => q.UserName.Like("admin"))
                    .Select(q => new
                    {
                        UserID = q.UserID,
                        UserName = q.UserName.Substring(1, 2),
                    });

    解析如下:

    SELECT [t0].[UserID], Substring([t0].[UserName],1,2)  AS [UserName] 
     FROM [Adm_User]  AS  [t0] WITH(NOLOCK)  
     WHERE ([t0].[UserName] LIKE @p0)
    ParameterName:@p0 Value:%admin% DbType:AnsiString

    分页写法:

    ConditionResult<Adm_User> userList = DMS.Create<Adm_User>()
                      .Where(a => a.UserName.Like("1111") && a.UserCode == "1122")
                      .OrderBy(q => q.OrderBy(q.UserID))
                      .Pager(1, 2).ToConditionResult(0);

    ConditionResult<T>的信息里面包括这里面总共有多少条数据(分页前),List带有结果集里的东西。。。

    其它写法:

     var userList = (from a in DMS.Create<Adm_User>()
                        where a.UserID == 1 && a.UserName.Like("1")
                        select a);

    INNER JOIN 写法:

     var query = DMS.Create<Adm_User>()
                    .Join(DMS.Create<Adm_Rights>(),
                    (x, y) => x.UserID == y.RightsID,
                    (x, y) => new
                    {
                        x.UserCode,
                        x.UserID,
                        y.RightsName,
                        y.RightsParentID,
                        RID = y.RightsID,
                        RightsName2 = y.RightsName,
                    });

    另外还支持LeftJoin,RightJoin,写法相近,这里就不举例了.

    查询结果函数有:

    ToList<T>    --返回结果集信息,支持任意类,以类属性自动给值,参数有几个,1.是否启用缓存,2.返回条数,3.对属性是否忽略大小写进行赋值

    ToConditionResult<T>   --返回分页结果集信息

    ToResult<T>  --返回DataTable数据,如果没有实体也没有关系的.只要返回DataTable,想怎么处理就怎么处理,呼呼..

    从上可以看出,select查询是支持匿名写法的。生成的SQL语句如上,列查询的方式也加了一个SQL函数

     以上是这章的一些查询的例子。。暂先到这了。。

     相关下载:http://files.cnblogs.com/files/kingkoo/DMSFrameRights.zip 此版本为以前的一个版本,最新的版本请加群问群主吧

    新上传DMSFrame版本文件:http://files.cnblogs.com/files/kingkoo/DMSFrame_Secure20150606.7z

  • 相关阅读:
    微信小程序配置域名的时候提示“校验文件验证失败”
    微信小程序封装mixins方法
    nuxt中报window is not defined
    nuxt中iview按需加载配置
    nuxt 项目安装及环境配置
    使用指针遍历图像
    图像添加噪声(椒盐噪声)
    Java中基本知识梳理【定时器实现多线程】-----2015年3月15日
    Java基础知识---【静态成员,封装性,包】------2015年3月6日
    Java中基本知识梳理【基本变量的处理】-----2015年3月6日
  • 原文地址:https://www.cnblogs.com/kingkoo/p/4533067.html
Copyright © 2011-2022 走看看