zoukankan      html  css  js  c++  java
  • CYQ.Data V5 MDataTable 专属篇介绍

    前言

    以前一两个月才出一篇,这三天有点变态地连续1天1篇(其实都是上周末两天写好的存货)。

    短期应该没有新的和此框架相关的文章要写了,这应该是最后一篇,大伙且看且珍惜。

    前两篇讲数据库读写分离和分布式缓存,这篇隆重地介绍一下:MDataTable,毕竟它有很多未公布或隐藏技能,值得一看。

    CYQ.Data 核心使用类介绍

    常用:

    1:操作数据库:MAction、MProc (名称空间:CYQ.Data)

    2:日志操作:Log、SysLogs(名称空间:CYQ.Data)

    3:配置和性能调试:AppConfig、AppDebug(名称空间:CYQ.Data)

    4:内存表体系:MDataTable(MDataRow、MDataCell) (名称空间:CYQ.Data.Table)

    5:Json系:JsonHelper (名称空间:CYQ.Data.Tool)

    6:本地缓存和分布式缓存:CacheManage (名称空间:CYQ.Data.Cache)

    掌握上面几个类,基本就掌握了框架的核心了。

    不常用:

    1:实体型操作数据库:OrmBase、SimpleOrmBase、DBFast  (名称空间:CYQ.Data.Orm)

    2:Html/XHtml模板引擎:XHtmlAction、RSS (名称空间:CYQ.Data.Xml)

    3:AOP编程:IAop接口 (名称空间:CYQ.Data.Aop)

    4:数据库结构工具:DBTool (名称空间:CYQ.Data.Tool)

    5:语法糖及UI扩展:IField接口、IUIValue接口、RegisterUI (名称空间:CYQ.Data.Extension)

    以上就是整个框架的所有,全部加起来目前编绎才300K左右,仅有一个dll,无任何其它直接依赖,但能做的事超出你想象。

    下面开始介绍MDataTable

    1:MDataTable与数据库的关系

    先看一张图:

    和支持的所有数据库打通,这就是MDataTable的强大之处,任何一种数据库的数据只要流向MDataTable,都可以自由转到任意一种数据库输出。

    而实现这一切的方法就是:AcceptChanges (AcceptOp op, string newConn, params object[] jointPrimaryKeys)

    深受广大网友喜爱的DBImport导数据库工具,就是靠它完成的。

    2:MDataTable与数据类型的关系

    先看一张图:

    MDataTable和主流数据类型也打通了,即任意一种数据,经过MDataTable,就可以以任意一种数据格式输出。

    而实现这一切的方法就是:MDataTable.CreateFrom (object data) 和 ToJson()、ToXml()、ToList<T>()。

    CreateFrom除了支持这几种,其它字典型的如:Dictionary、HashTable等实现IEnumerable接口的都可以往里塞。

    如果只有一行数据,就对应MDataRow的LoadFrom方法。

    3:MDataTable的隐式转换类型

    先看一张图:

    对这种几种类型,只需要MDataTable dt=xxx;

    4:MDataTable的属性和方法

    先看一张图:

    静态方法只有一个,就是上面提到的:CreateFrom。

    图里漏了一个方法:获取某列的集合:List<T> GetColumnItems<T>

    5:几个新方法的代码演示

    1:行列转换Pivot(string rowName, string colName, string valueName)

    原来数据是这样的:

    调用之后数据是这样的:

    2:多表关联:Join(MDataTable dt, params string[] appendColumns)

    先看这一段截自分布式缓存memcache里的代码:

    status有N个Dictionary,每个字段转成MDataTable后是这样的:

    每个表的Key是一样的,所以通过指定表的Join类为Key,然后把Value改一下名称即可。

    表Join后的结果是这样的:

    3:动态属性:DynamicData

    既然为动态属性,说明它很动:

    A:平时就是一个属性,你可以把它当临时存档对象。

    B:适用于批量事务时:如果AcceptChanges失败,DynamicData会存档Exception异常。

    C:通常一个指AcceptChanges是一个事务,如果外部也有事务,希望在同一个事务时:

    看一下ASP.NET Aries里关于提交用户权限的代码:

                    using (MAction action = new MAction(TableNames.Sys_RoleAction))
                    {
                        action.BeginTransation();
                        action.Delete("RoleID='" + roleID + "'");
                        dt.DynamicData = action;//传递数据链接
                        dt.SetState(1);
                        result = dt.AcceptChanges(AcceptOp.Insert);
                        if (!result)
                        {
                            action.RollBack();
                        }
                        action.EndTransation();
                    } 

    可以把MAction或MProc对象传递给它,再执行事务,如此,就共用了一个链接了,启到同一个事务的作用。

    总结

    MDataTable 在此框架中,像一个关键的路由结点,相当重要,轻轻了解,用好它,你的开发旅程会变的很轻松。

  • 相关阅读:
    Filter过滤器
    jsp-JSTL表达式
    jsp-EL表达式
    JSP概述
    servlet编码问题
    微信开放平台-踩坑1
    Supervisor的安装以及使用
    laravel-mix的安装
    Laravel框架中打印sql
    Laravel 5.7 使用 PHP artisan migrate 的问题
  • 原文地址:https://www.cnblogs.com/cyq1162/p/5618048.html
Copyright © 2011-2022 走看看