首页 > 其他分享 >mormot概述

mormot概述

时间:2023-07-02 09:04:11浏览次数:40  
标签:classname string funcname mormot 概述 UniQuery1 POST method

mormot概述

  • ORM/ODM :几乎所有数据库(SQL或Nosql)上的对象持久性;
  • SOA 把你的商业逻辑组织成rest服务;
  • 客户 :通过ORM类或SOA接口,从任何平台上使用您的数据或服务;
  • 网络MVC :发布您的ORM/SOA流程作为响应网络应用程序。

mormot总设计:

 mormot c/s orm/soa 框架:

 mormot架构图:

 mormot model驱动设计:

unit Unit1;
/// <author>cxg 202371</author>
interface

uses
  mormot2.json.serial,
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, Vcl.StdCtrls, Vcl.Grids,
  Vcl.DBGrids, MemDS, DBAccess, Uni, UniProvider, SQLServerUniProvider,
  FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Param,
  FireDAC.Stan.Error, FireDAC.DatS, FireDAC.Phys.Intf, FireDAC.DApt.Intf,
  FireDAC.Comp.DataSet, FireDAC.Comp.Client;

type
  Tdw = record            //定义model 一般用结构体或类定义model
    unitid: string;
    unitname: string;
  end;

  Tdws = record
    dw: TArray<Tdw>;
  end;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    DBGrid1: TDBGrid;
    Memo1: TMemo;
    UniConnection1: TUniConnection;
    UniQuery1: TUniQuery;
    SQLServerUniProvider1: TSQLServerUniProvider;
    DataSource1: TDataSource;
    FDMemTable1: TFDMemTable;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
//序列
begin
  //数据层的查询
  UniQuery1.Close;
  UniQuery1.SQL.Clear;
  UniQuery1.SQL.Text := 'select * from tunit';
  UniQuery1.Open;
  //dataset-->model
  var dws: Tdws;
  SetLength(dws.dw, UniQuery1.RecordCount);
  var i: Integer := 0;
  UniQuery1.First;
  while not UniQuery1.Eof do
  begin
    dws.dw[i].unitid := UniQuery1.FieldByName('unitid').AsString;
    dws.dw[i].unitname := UniQuery1.FieldByName('unitname').AsString;
    UniQuery1.Next;
    Inc(i);
  end;
  //序列model-->json
  var serial: TSerial;
  Memo1.Text := serial.marshal<Tdws>(dws);
end;

procedure TForm1.Button2Click(Sender: TObject);
//还原
begin
  //还原json-->model
  var serial: TSerial;
  var dws: Tdws := serial.unmarshal<Tdws>(Memo1.Text);
  //model添加进内存表
  FDMemTable1.DisableControls;
  FDMemTable1.EmptyDataSet;
  for var i: Integer := 0 to High(dws.dw) do
    FDMemTable1.InsertRecord([dws.dw[i].unitid, dws.dw[i].unitname]);
  FDMemTable1.EnableControls;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  //建内存表
  FDMemTable1.FieldDefs.Clear;
  FDMemTable1.FieldDefs.Add('unitid', ftString, 9);
  FDMemTable1.FieldDefs.Add('unitname', ftString, 9);
  FDMemTable1.CreateDataSet;
end;

end.

 有本地或远程访问,通过配置服务器配置文件自动路由REST服务:

{
    "bin":
    [
        {
            "classname":"TFuncBin",
            "method":"POST",
            "funcname":"select"
        },
        {
            "classname":"TFuncBin",
            "method":"POST",
            "funcname":"save"
        },
        {
            "classname":"TFuncBin",
            "method":"POST",
            "funcname":"execsql"
        },
        {
            "classname":"TFuncBin",
            "method":"POST",
            "funcname":"spopen"
        },
        {
            "classname":"TFuncBin",
            "method":"POST",
            "funcname":"download"
        },
        {
            "classname":"TFuncBin",
            "method":"POST",
            "funcname":"upload"
        },
        {
            "classname":"TFuncBin",
            "method":"POST",
            "funcname":"snowflake"
        },
        {
            "classname":"TFuncBin",
            "method":"POST",
            "funcname":"starttrans"
        },
        {
            "classname":"TFuncBin",
            "method":"POST",
            "funcname":"committrans"
        },
        {
            "classname":"TFuncBin",
            "method":"POST",
            "funcname":"rollbacktrans"
        }
    ],
    "tunit":
    [
        {
            "classname":"TFuncUnit",
            "method":"GET",
            "funcname":"select"
        },
        {
            "classname":"TFuncUnit",
            "method":"POST",
            "funcname":"insert"
        },
        {
            "classname":"TFuncUnit",
            "method":"PUT",
            "funcname":"update"
        },        
        {
            "classname":"TFuncUnit",
            "method":"DELETE",
            "funcname":"delete"
        }        
    ],
    "multipart":
    [
        {
            "classname":"TMultiPart",
            "method":"GET",
            "funcname":"filedownload"
        },
        {
            "classname":"TMultiPart",
            "method":"POST",
            "funcname":"fileupload"
        }
    ],
    "storedproc":
    [
        {
            "classname":"TStoredProc",
            "method":"POST",
            "funcname":"sp9"
        }
    ],
    "tunit2":
    [
        {
            "classname":"TFuncUnit2",
            "method":"GET",
            "funcname":"select"
        }
    ]
}

 按领域(资源)组织的rest api:

type
  TCRUD = record
    resource: string;    //资源
    sender: TComponent;
    where: string;
    function Select: TClientDataSet;
    function Insert(const rec: array of const): string;
    function Update(const rec: array of const): string;
    function Delete: string;
  end;

  TMultiPart = record
    resource: string;    //资源
    FileSaveTo: string;
    FileName: string;
    function DownloadFile: string;
    function UploadFile: string;
  end;

  TStoredProc = record
    resource: string;    //资源
    function SP9(sender: TComponent; params: array of const): TClientDataSet;
  end;

 

标签:classname,string,funcname,mormot,概述,UniQuery1,POST,method
From: https://www.cnblogs.com/hnxxcxg/p/17520354.html

相关文章

  • SAP CRM My Note 应用的设计要点概述
    SAPCRMFiori(客户关系管理)是SAP提供的一套基于Fiori用户体验的客户关系管理应用程序。Fiori是一种现代化的、响应式的用户界面,为用户提供了一个直观、一致的体验。在SAPCRMFiori应用中,MyNotes应用是一个允许用户添加、查看和管理个人笔记的工具。MyNotes应用的主要......
  • MATLAB代码:综合能源系统优化模型概述及其鲁棒优化
    MATLAB代码:综合能源系统优化模型概述及其鲁棒优化主要内容:本文在分析典型冷热电联供(combinedcooling,heatandpower,CCHP)系统的基础上,并结合其他优秀lunwen加以补充模型中的不足处,并围绕该系统结构设计了微网调度优化模型构架.在该结构中,选取电气、烟气、蒸汽、热......
  • PostgreSQL技术大讲堂 - 第20讲:事务概述与隔离级别
     PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUGPG技术大讲堂。第20讲:事务概述与隔离级别内容1:ACID四大特性内容2:PostgreSQL......
  • WPF的六类控件之概述
    在线演示:http://v.youku.com/v_show/id_XNzA0NjU1Mjk2.html清晰版视频+代码下载:http://115.com/lb/5lbcftnrfo9s一、简介本篇让我们一起来了解一下WPF对控件的定义,以及它的六大类控件,分别为:内容控件、带标题的内容控件、条目控件、带标题的条目控件、特殊控件、布局控件。主要内......
  • JDBC p1 JDBC概述
    JDBC概述基本介绍JDBC为访问不同的数据库提供了统一的接口,为使用者屏蔽了细节问题。Java程序员使用JDBC,可以连接任何提供了JDBC驱动程序的数据库系统,从而完成对数据库的各种操作。JDBC的基本原理:JDBC带来的好处JDBC是Java提供的一套用于数据库操作的接口API,Java程......
  • UMP系统概述
    突出性能:1.低成本,高性能  2.开源数据库UMP在设计时要实现一下原则:多租户: ......
  • Hadoop入门之组成概述
    Hadoop为分布式系统基础结构多个服务器共同解决一个问题,进行海量数据的储存和海量数据的分析计算HDFS架构NameNode:储存文件的元数据,如文件名,文件目录结构,文件属性(生成时间,副本数,文件权限),以及每个文件的块列表和块所在的DataNode等DataNode:在本地文件系统储存文件块数据,以及......
  • Docker技术架构概述
    1、Docker技术构成Docker软件采用客户-服务(CS架构)的技术架构模式,DockerClient和DockerDaemon交互,DockerDaemon负责创建、运行、发布容器,DockerClient和DockerDaemon可以在同一个系统中,或者DockerClient可以通过RESTAPI远程控制DockerDaemon。DockerCompose负责控制一组应......
  • 使用纯 ABAP 开发 SAP UI5 之一:概述
    abap2UI5是一个开源项目,提供了一种纯ABAP的方法来开发UI5应用程序,无需使用JavaScript、OData和RAP——类似于过去,只需要几行ABAP代码就可以使用选择屏幕和ALV显示输入和表格。该项目设计具有最小的系统占用,并可以在本地和云环境中运行。使用ABAP开发SAPUI5应用的一些优势:......
  • 网安--密码安全概述
     不安全密码1、默认密码路由器默认密码查询:https://www.toolmao.com/baiduapp/routerpwd/2、弱口令弱口令查询网站:https://nordpass.com/most-common-passwords-list/3、已经泄露的密码查询网站:https://haveibeenpwned.com/......