{"id":19133619,"url":"https://github.com/hashload/ormbr","last_synced_at":"2025-11-13T07:02:10.777Z","repository":{"id":37005118,"uuid":"500913011","full_name":"HashLoad/ormbr","owner":"HashLoad","description":"ORMBr Framework for Delphi (Isaque Pinheiro)","archived":false,"fork":false,"pushed_at":"2024-10-22T17:19:39.000Z","size":41721,"stargazers_count":43,"open_issues_count":3,"forks_count":19,"subscribers_count":12,"default_branch":"master","last_synced_at":"2025-10-28T06:28:42.846Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://www.isaquepinheiro.com.br","language":"Pascal","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/HashLoad.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-06-07T16:09:55.000Z","updated_at":"2025-10-14T14:20:33.000Z","dependencies_parsed_at":"2023-09-22T06:20:08.922Z","dependency_job_id":"eb6e4222-c26c-485a-801a-2c4b7abd9421","html_url":"https://github.com/HashLoad/ormbr","commit_stats":{"total_commits":309,"total_committers":13,"mean_commits":23.76923076923077,"dds":"0.25566343042071193","last_synced_commit":"98f3067da016bb891f8016e3c5978090c1f72766"},"previous_names":[],"tags_count":26,"template":false,"template_full_name":null,"purl":"pkg:github/HashLoad/ormbr","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HashLoad%2Formbr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HashLoad%2Formbr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HashLoad%2Formbr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HashLoad%2Formbr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/HashLoad","download_url":"https://codeload.github.com/HashLoad/ormbr/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HashLoad%2Formbr/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":284170493,"owners_count":26959115,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-11-13T02:00:06.582Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-09T06:23:10.284Z","updated_at":"2025-11-13T07:02:10.748Z","avatar_url":"https://github.com/HashLoad.png","language":"Pascal","readme":"# ORMBr Framework for Delphi\n\nDa visão de aproveitar ao máximo o conceito de Orientação a Objetos, o Mapeamento Objeto-Relacional (ORM) consiste em um framework que tem por objetivo encurtar as distância entre a orientado a objetos e o modelo entidade-relacional, criando uma ponte (mapeamento) entre eles. Com a abordagem, é possível a construção de sistemas aplicando a orientado a objetos, cujo os objetos são persistidos em um banco de dados relacional.\n\nUm ORM possui diversos métodos básicos que irão realizar a interação entre a aplicação e o banco de dados, se responsabilizando por algumas tarefas básicas, como o CRUD (Create, Read, Update e Delete), por exemplo. Além disso, o ORM irá gerenciar os detalhes de mapeamento de um conjunto de objetos para um banco de dados.\n\nO ORM reduz ao mínimo a necessidade de escrever códigos de conexão e queries SQL. Dessa forma, é possível obter uma redução significativa nos códigos da aplicação, gerando um código mais elegante e consequentemente ampliando a facilidade de posteriores manutenções na aplicação.\n\nÉ importante deixar claro que a utilização de um framework ORM não substitui totalmente a necessidade da utilização de SQL na sua aplicação. Embora o ORM satisfaça a maior parte das necessidades de interação com o banco de dados, em alguns casos, haverá a necessidade, por exemplo, de consultas mais customizadas, que terão que ser realizadas por meio de SQL. \npor: Bárbara Ranieri\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://www.isaquepinheiro.com.br\"\u003e\n    \u003cimg src=\"https://github.com/HashLoad/ORMBr/blob/master/Images/ormbrbitucket.png\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n## 🏛 Delphi Versions\nEmbarcadero Delphi XE e superior.\n\n## ⚙️ Instalação\nInstalação usando o [`boss install`]\n```sh\nboss install \"https://github.com/HashLoad/ormbr\"\n```\n\n## ⚠ Dependências\n\n:heavy_check_mark: [DBCBr Framework for Delphi](https://github.com/hashload/dbcbr)\n\n:heavy_check_mark: [DBEBr Framework for Delphi/Lazarus](https://github.com/hashload/dbebr)\n\n:heavy_check_mark: [CQLBr Framework for Delphi/Lazarus](https://github.com/hashload/cqlbr)\n\n:heavy_check_mark: [JSONBr Framework for Delphi](https://github.com/hashload/jsonbr)\n\n## ⚡️ Como usar\n```Delphi\nunit ormbr.model.client;\n\ninterface\n\nuses\n  Classes, \n  DB, \n  SysUtils, \n  Generics.Collections, \n  /// orm \n  dbcbr.mapping.attributes,\n  ormbr.types.nullable,\n  dbcbr.types.mapping,\n  dbcbr.mapping.register,\n  ormbr.types.blob;\n\ntype\n  [Entity]\n  [Table('client','')]\n  [PrimaryKey('client_id', 'Chave primária')]\n  [Indexe('idx_client_name','client_name')]\n  [OrderBy('client_id Desc')]\n  Tclient = class\n  private\n    { Private declarations }\n    Fclient_id: Integer;\n    Fclient_name: String;\n    Fclient_foto: TBlob;\n  public\n    { Public declarations }\n    [Restrictions([NoUpdate, NotNull])]\n    [Column('client_id', ftInteger)]\n    [Dictionary('client_id','Mensagem de validação','','','',taCenter)]\n    property client_id: Integer read Fclient_id write Fclient_id;\n\n    [Column('client_name', ftString, 40)]\n    [Dictionary('client_name','Mensagem de validação','','','',taLeftJustify)]\n    property client_name: String read Fclient_name write Fclient_name;\n\n    [Column('client_foto', ftBlob)]\n    [Dictionary('client_foto','Mensagem de validação')]\n    property client_foto: TBlob read Fclient_foto write Fclient_foto;\n  end;\n\nimplementation\n\ninitialization\n  TRegisterClass.RegisterEntity(Tclient);\n\nend.\n```\n\n```Delphi\nunit uMainFormORM;\n\ninterface\n\nuses\n  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,\n  DB, Grids, DBGrids, StdCtrls, Mask, DBClient, DBCtrls, ExtCtrls,\n\n  // ORMBr\n  dbebr.factory.interfaces,\n  ormbr.container.dataset.interfaces,\n  ormbr.container.fdmemtable,\n  dbebr.factory.firedac,\n  ormbr.dml.generator.sqlite,\n  ormbr.model.client,\n\n  // FireDAC, caso esteja usando ele\n  FireDAC.Stan.Option, FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf,\n  FireDAC.Stan.Def, FireDAC.Stan.Pool, FireDAC.Stan.Async, FireDAC.Phys,\n  FireDAC.VCLUI.Wait, FireDAC.Comp.Client, FireDAC.Stan.Intf,\n  FireDAC.Phys.SQLite, FireDAC.Phys.SQLiteDef, FireDAC.Stan.ExprFuncs,\n  FireDAC.Comp.UI, FireDAC.DApt, FireDAC.Stan.Param, FireDAC.DatS,\n  FireDAC.DApt.Intf, FireDAC.Comp.DataSet, FireDAC.Phys.MySQL,\n  FireDAC.Phys.MySQLDef, FireDAC.Phys.SQLiteWrapper.Stat;\n\ntype\n  TForm3 = class(TForm)\n    DBGrid1: TDBGrid;\n    DBNavigator1: TDBNavigator;\n    Button2: TButton;\n    FDConnection1: TFDConnection;\n    FDPhysSQLiteDriverLink1: TFDPhysSQLiteDriverLink;\n    FDGUIxWaitCursor1: TFDGUIxWaitCursor;\n    FDClient: TFDMemTable;\n    DataSource1: TDataSource;\n    procedure FormCreate(Sender: TObject);\n    procedure Button2Click(Sender: TObject);\n    procedure FDClientAfterInsert(DataSet: TDataSet);\n  private\n    { Private declarations }\n    // Interface de conexão do ORMBr\n    FConn: IDBConnection;\n    // Interface para acontrolar o DataSet\n    FContainerClient: IContainerDataSet\u003cTclient\u003e;\npublic\n    { Public declarations }\n  end;\n\nvar\n  Form3: TForm3;\n\nimplementation\n\nuses\n  StrUtils;\n\n{$R *.dfm}\n\nprocedure TForm3.Button2Click(Sender: TObject);\nbegin\n  FContainerClient.ApplyUpdates(0);\nend;\n\nprocedure TForm3.FDClientAfterInsert(DataSet: TDataSet);\nvar\n  ID: TGUID;\nbegin\n  FDClient.FieldByName('client_id').AsString := GUIDToString(ID);\nend;\n\nprocedure TForm3.FormCreate(Sender: TObject);\nbegin\n  // Instância da class de conexão via FireDAC\n  FConn := TFactoryFireDAC.Create(FDConnection1, dnSQLite);\n  // Client\n  FContainerClient := TContainerFDMemTable\u003cTclient\u003e.Create(oConn, FDClient);\n\n  FContainerClient.Open;\nend;\n\nend.\n```\n\n```Delphi\n...\n\nprocedure TForm3.FormCreate(Sender: TObject);\nbegin\n  // Instância da class de conexão via FireDAC\n  FConn := TFactoryFireDAC.Create(FDConnection1, dnMySQL);\n\n  FManager := TManagerDataSet.Create(oConn);\n  FConn.SetCommandMonitor(TCommandMonitor.GetInstance);\n  FManager.AddAdapter\u003cTmaster\u003e(FDMaster, 3)\n          .AddAdapter\u003cTdetail, Tmaster\u003e(FDDetail)\n          .AddAdapter\u003cTclient, Tmaster\u003e(FDClient)\n          .AddAdapter\u003cTlookup\u003e(FDLookup)\n          .AddLookupField\u003cTdetail, Tlookup\u003e('fieldname',\n                                            'lookup_id',\n                                            'lookup_id',\n                                            'lookup_description',\n                                            'Descrição Lookup');\n  FManager.Open\u003cTmaster\u003e;\nend;\n```\n\n## ✍️ License\n[![License](https://img.shields.io/badge/Licence-LGPL--3.0-blue.svg)](https://opensource.org/licenses/LGPL-3.0)\n\n## ⛏️ Contribuição\n\nNossa equipe adoraria receber contribuições para este projeto open source. Se você tiver alguma ideia ou correção de bug, sinta-se à vontade para abrir uma issue ou enviar uma pull request.\n\n[![Issues](https://img.shields.io/badge/Issues-channel-orange)](https://github.com/HashLoad/ormbr/issues)\n\nPara enviar uma pull request, siga estas etapas:\n\n1. Faça um fork do projeto\n2. Crie uma nova branch (`git checkout -b minha-nova-funcionalidade`)\n3. Faça suas alterações e commit (`git commit -am 'Adicionando nova funcionalidade'`)\n4. Faça push da branch (`git push origin minha-nova-funcionalidade`)\n5. Abra uma pull request\n\n## 📬 Contato\n[![Telegram](https://img.shields.io/badge/Telegram-channel-blue)](https://t.me/hashload)\n\n## 💲 Doação\n[![Doação](https://img.shields.io/badge/PagSeguro-contribua-green)](https://pag.ae/bglQrWD)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhashload%2Formbr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhashload%2Formbr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhashload%2Formbr/lists"}