ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

delphi数据表自动生成rest CRUD和rest api在线文档

2022-07-07 17:39:32  阅读:264  来源: 互联网

标签:req string delphi Serialize db rest 数据表 qry ParamByName


delphi数据表自动生成rest CRUD和rest api在线文档

1)设置数据库连接参数

2)代码工厂自动生成REST CRUD方法代码

unit rest.tgoods;
//代码由代码工厂自动生成
//2022-07-07
{$I def.inc}
interface

uses
  {$IFDEF firedac}  db.firedac, db.firedacPool, {$ENDIF}
  {$IFDEF unidac}db.unidac, db.unidacpool,  {$ENDIF}
  system.JSON.Serializers, yn.log, system.JSON, SysUtils, json.help;

type
  Ttgoods = record
    [Serialize(1)] goodsid: string;
    [Serialize(2)] barcode: string;
    [Serialize(3)] goodsname: string;
    [Serialize(4)] pyjm: string;
    [Serialize(5)] gg: string;
    [Serialize(6)] kindid: string;
    [Serialize(7)] jj: double;
    [Serialize(8)] lsj: double;
    [Serialize(9)] kcxx: double;
    [Serialize(10)] kcsx: double;
    [Serialize(11)] unitid: string;
    [Serialize(12)] unitname: string;
    [Serialize(13)] kindname: string;
  end;

  TtgoodsArray = record
    [Serialize(1)] status: integer;
    [Serialize(2)] exception: string;
    [Serialize(3)] message: string;
    [Serialize(4)] tgoodss: TArray<Ttgoods>;
  end;

  TRes = record
    [Serialize(1)] status: integer;
    [Serialize(2)] exception: string;
    [Serialize(3)] message: string;
  end;

function select(url: string; body: TBytes): string;

function insert(url: string; body: TBytes): string;

function update(url: string; body: TBytes): string;

function delete(url: string; body: TBytes): string;

implementation

function select(url: string; body: TBytes): string;
var
  db: tdb;
  pool: tdbpool;
  arr: TArray<string>;
  serial: TJsonSerializer;
  rows: TtgoodsArray;
  i, h: integer;
  res: TRes;
begin
  serial := TJsonSerializer.Create;
  try
    try
      arr := url.Split(['/']);
      pool := GetDBPool(arr[4]);
      db := pool.Lock;
      db.qry.Close;
      db.qry.SQL.Clear;
      db.qry.SQL.Text := 'select * from tgoods';
      db.qry.Open;
      SetLength(rows.tgoodss, db.qry.RecordCount);
      db.qry.First;
      i := 0;
      while not db.qry.Eof do
      begin
        rows.tgoodss[i].goodsid := db.qry.fieldbyname('goodsid').asstring;
        rows.tgoodss[i].barcode := db.qry.fieldbyname('barcode').asstring;
        rows.tgoodss[i].goodsname := db.qry.fieldbyname('goodsname').asstring;
        rows.tgoodss[i].pyjm := db.qry.fieldbyname('pyjm').asstring;
        rows.tgoodss[i].gg := db.qry.fieldbyname('gg').asstring;
        rows.tgoodss[i].kindid := db.qry.fieldbyname('kindid').asstring;
        rows.tgoodss[i].jj := db.qry.fieldbyname('jj').AsFloat;
        rows.tgoodss[i].lsj := db.qry.fieldbyname('lsj').AsFloat;
        rows.tgoodss[i].kcxx := db.qry.fieldbyname('kcxx').AsFloat;
        rows.tgoodss[i].kcsx := db.qry.fieldbyname('kcsx').AsFloat;
        rows.tgoodss[i].unitid := db.qry.fieldbyname('unitid').asstring;
        rows.tgoodss[i].unitname := db.qry.fieldbyname('unitname').asstring;
        rows.tgoodss[i].kindname := db.qry.fieldbyname('kindname').asstring;
        rows.status := 1;
        rows.message := 'success';
        inc(i);
        db.qry.Next;
      end;
      result := serial.Serialize<TtgoodsArray>(rows);
    except
      on E: Exception do
      begin
        res.status := 0;
        res.exception := E.message;
        result := serial.Serialize<TRes>(res);
      end;
    end;
  finally
    pool.Unlock(db);
    serial.Free;
  end;
end;

function insert(url: string; body: TBytes): string;
var
  db: tdb;
  pool: tdbpool;
  arr: tarray<string>;
  serial: TJsonSerializer;
  res: TRes;
  req: TJSONObject;
begin
  serial := TJsonSerializer.Create;
  req := TJSONObject.Create;
  try
    try
      req.Parse(body, 0, True);
      arr := url.Split(['/']);
      pool := GetDBPool(arr[4]);
      db := pool.Lock;
      db.qry.Close;
      db.qry.SQL.Clear;
      db.qry.SQL.Text := 'insert into tgoods (goodsid,barcode,goodsname,pyjm,gg,kindid,jj,lsj,kcxx,kcsx,unitid,unitname,kindname) values (:goodsid,:barcode,:goodsname,:pyjm,:gg,:kindid,:jj,:lsj,:kcxx,:kcsx,:unitid,:unitname,:kindname)';
      db.qry.ParamByName('goodsid').AsString := req.S['goodsid'];
      db.qry.ParamByName('barcode').AsString := req.S['barcode'];
      db.qry.ParamByName('goodsname').AsString := req.S['goodsname'];
      db.qry.ParamByName('pyjm').AsString := req.S['pyjm'];
      db.qry.ParamByName('gg').AsString := req.S['gg'];
      db.qry.ParamByName('kindid').AsString := req.S['kindid'];
      db.qry.ParamByName('jj').AsFloat := req.F['jj'];
      db.qry.ParamByName('lsj').AsFloat := req.F['lsj'];
      db.qry.ParamByName('kcxx').AsFloat := req.F['kcxx'];
      db.qry.ParamByName('kcsx').AsFloat := req.F['kcsx'];
      db.qry.ParamByName('unitid').AsString := req.S['unitid'];
      db.qry.ParamByName('unitname').AsString := req.S['unitname'];
      db.qry.ParamByName('kindname').AsString := req.S['kindname'];
      db.qry.ExecSQL;
      res.status := 1;
      res.message := 'success';
      Result := serial.Serialize<TRes>(res);
    except
      on E: Exception do
      begin
        res.status := 0;
        res.exception := E.Message;
        Result := serial.Serialize<TRes>(res);
      end;
    end;
  finally
    pool.Unlock(db);
    serial.Free;
    req.free;
  end;
end;

function update(url: string; body: TBytes): string;
var
  db: tdb;
  pool: tdbpool;
  arr: tarray<string>;
  serial: TJsonSerializer;
  res: TRes;
  req: TJSONObject;
begin
  serial := TJsonSerializer.Create;
  req := TJSONObject.Create;
  try
    try
      req.Parse(body, 0, True);
      arr := url.Split(['/']);
      pool := GetDBPool(arr[4]);
      db := pool.Lock;
      db.qry.Close;
      db.qry.SQL.Clear;
      db.qry.SQL.Text := 'update tgoods set goodsid=:goodsid,barcode=:barcode,goodsname=:goodsname,pyjm=:pyjm,gg=:gg,kindid=:kindid,jj=:jj,lsj=:lsj,kcxx=:kcxx,kcsx=:kcsx,unitid=:unitid,unitname=:unitname,kindname=:kindname where goodsid=:key0';
      db.qry.ParamByName('goodsid').AsString := req.S['goodsid'];
      db.qry.ParamByName('barcode').AsString := req.S['barcode'];
      db.qry.ParamByName('goodsname').AsString := req.S['goodsname'];
      db.qry.ParamByName('pyjm').AsString := req.S['pyjm'];
      db.qry.ParamByName('gg').AsString := req.S['gg'];
      db.qry.ParamByName('kindid').AsString := req.S['kindid'];
      db.qry.ParamByName('jj').AsFloat := req.F['jj'];
      db.qry.ParamByName('lsj').AsFloat := req.F['lsj'];
      db.qry.ParamByName('kcxx').AsFloat := req.F['kcxx'];
      db.qry.ParamByName('kcsx').AsFloat := req.F['kcsx'];
      db.qry.ParamByName('unitid').AsString := req.S['unitid'];
      db.qry.ParamByName('unitname').AsString := req.S['unitname'];
      db.qry.ParamByName('kindname').AsString := req.S['kindname'];
      db.qry.ParamByName('key0').AsString := arr[5];
      db.qry.ExecSQL;
      res.status := 1;
      res.message := 'success';
      Result := serial.Serialize<TRes>(res);
    except
      on E: Exception do
      begin
        res.status := 0;
        res.exception := E.Message;
        Result := serial.Serialize<TRes>(res);
      end;
    end;
  finally
    pool.Unlock(db);
    serial.Free;
    req.free;
  end;
end;

function delete(url: string; body: TBytes): string;
var
  db: tdb;
  pool: tdbpool;
  arr: tarray<string>;
  serial: TJsonSerializer;
  res: TRes;
begin
  serial := TJsonSerializer.Create;
  req := TJSONObject.Create;
  try
    try
      arr := url.Split(['/']);
      pool := GetDBPool(arr[4]);
      db := pool.Lock;
      db.qry.Close;
      db.qry.SQL.Clear;
      db.qry.SQL.Text := 'delete from tgoods where goodsid=:key0';
      db.qry.ParamByName('key0').AsString := arr[5];
      db.qry.ExecSQL;
      res.status := 1;
      res.message := 'success';
      Result := serial.Serialize<TRes>(res);
    except
      on E: Exception do
      begin
        res.status := 0;
        res.exception := E.Message;
        Result := serial.Serialize<TRes>(res);
      end;
    end;
  finally
    pool.Unlock(db);
    serial.Free;
  end;
end;

end.

  3)代码工厂自动生成REST在线接口文档

unit server.Resources.tgoods;
//代码由代码工厂自动生成
//2022-07-07
interface

uses
  System.SysUtils, WiRL.Core.Registry, WiRL.Core.Attributes,  WiRL.Core.MessageBody.Default,
  WiRL.http.Accept.MediaType;

type
  Ttgoods = record
    [Serialize(1)] goodsid: string;
    [Serialize(2)] barcode: string;
    [Serialize(3)] goodsname: string;
    [Serialize(4)] pyjm: string;
    [Serialize(5)] gg: string;
    [Serialize(6)] kindid: string;
    [Serialize(7)] jj: double;
    [Serialize(8)] lsj: double;
    [Serialize(9)] kcxx: double;
    [Serialize(10)] kcsx: double;
    [Serialize(11)] unitid: string;
    [Serialize(12)] unitname: string;
    [Serialize(13)] kindname: string;
  end;

  TtgoodsArray = record
    [Serialize(1)] status: integer;
    [Serialize(2)] exception: string;
    [Serialize(3)] message: string;
    [Serialize(4)] tgoodss: TArray<Ttgoods>;
  end;

  TRes = record
    [Serialize(1)] status: integer;
    [Serialize(2)] exception: string;
    [Serialize(3)] message: string;
  end;

  [Path('tgoods')]
  TtgoodsAPI = class
    [post, path('/select/{dbid}'), Produces(TMediaType.APPLICATION_JSON)]
    function select([PathParam('dbid')] dbid: string): TtgoodsArray; virtual; abstract;
    [post, path('/insert/{dbid}'), Consumes(TMediaType.APPLICATION_JSON), Produces(TMediaType.APPLICATION_JSON)]
    function insert([PathParam('dbid')] dbid: string; [BodyParam] body: Ttgoods): TRes; virtual; abstract;
    [post, path('/update/{dbid}/{goodsid}'), Consumes(TMediaType.APPLICATION_JSON), Produces(TMediaType.APPLICATION_JSON)]
    function update([PathParam('dbid')] dbid: string; [PathParam('goodsid')] goodsid: string; [BodyParam] body: Ttgoods): TRes; virtual; abstract;
    [post, path('/delete/{dbid}/{goodsid}'), Produces(TMediaType.APPLICATION_JSON)]
    function delete([PathParam('dbid')] dbid: string; [PathParam('goodsid')] goodsid: string): TRes; virtual; abstract;
  end;

implementation

initialization
  TWiRLResourceRegistry.Instance.RegisterResource<TtgoodsAPI>;

end.

  查看在线接口文档

 

标签:req,string,delphi,Serialize,db,rest,数据表,qry,ParamByName
来源: https://www.cnblogs.com/hnxxcxg/p/16455500.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有