/SimpleORM

ORM Simples para Aplicações Delphi

Primary LanguagePascalMIT LicenseMIT

SimpleORM

ORM Simples para Aplicações Delphi

O SimpleORM tem o Objetivo de facilitar suas implementações de CRUD, agilizando mais de 80% do seu processo de desenvolvimento de software.

Homologado para os drivers de Conexão Firedac e RestDataware.

Link do Grupo no Telegram

Grupo SimpleORM

Gerador de Classes para o SimpleORM criados pela Comunidade

andersonlugarinhoramos
alan-petry
Douglas09

Entidade do Banco de Dados Mapeada

uses
  SimpleAttributes;

Type
  [Tabela('PEDIDO')]
  TPEDIDO = class
  private
    FID: Integer;
    FCLIENTE: String;
    FDATAPEDIDO: TDatetime;
    FVALORTOTAL: Currency;
    procedure SetID(const Value: Integer);
    procedure SetCLIENTE(const Value: String);
    procedure SetDATAPEDIDO(const Value: TDatetime);
    procedure SetVALORTOTAL(const Value: Currency);
  public
    constructor Create;
    destructor Destroy; override;
  published
    [Campo('ID'), Pk, AutoInc]
    property ID: Integer read FID write SetID;
    [Campo('NOME')]
    property CLIENTE: String read FCLIENTE write SetCLIENTE;
    [Campo('DATA')]
    property DATAPEDIDO: TDatetime read FDATAPEDIDO write SetDATAPEDIDO;
    [Campo('VALOR')]
    property VALORTOTAL: Currency read FVALORTOTAL write SetVALORTOTAL;
  end;

Obs.: Em casos como o "Campo('ID')" a anotação é opcional, pois a property tem o mesmo nome do campo no banco de dados.

Atributos

Tabela - Informa o Nome da Tabela no Banco em que a Classe faz o mapeamento.

Campo - Informa o Nome do Campo no Banco de Dados em que a property está fazendo Referência.

PK - Informa se o Campo é PrimaryKey.

FK - Informa se o Campo é ForeignKey.

NotNull - Informa se o Campo é NotNull.

Ignore - Ignorar o Campo nas Operações de CRUD.

AutoInc - Informa se o Campo é AutoIncremento.

NumberOnly - Informa se o Campo deve aceitar somente números.

Bind - Informa o Nome do Campo no Banco de Dados ou a property que o componente visual está fazendo Referência.

Display - Informa a descrição que deve aparecer no título de grids.

Format - Informa o formato que o campo deve ter, coisas como (tamanho, precisão, máscara e range).

Principais Operações

Instalação

Basta adicionar ao LibraryPatch o Caminho do SimpleORM ou via Boss com o comando boss install bittencourtthulio/SimpleORM, não precisa realizar a instalação de nenhum componente.

Uses Necessárias

SimpleInterface,

SimpleDAO,

SimpleAttributes,

Dependendo do seu driver de Conexão utilizar as Uses SimpleQueryFiredac ou SimpleQueryRestDW

Inicialização do SimpleORM

var
  Conn : iSimpleQuery;
  DAOPedido : iSimpleDAO<TPEDIDO>;
begin
  Conn := TSimpleQueryFiredac.New(FDConnection1);
  DAOPedido := TSimpleDAO<TPEDIDO>
                  .New(Conn)
                  .DataSource(DataSource1)
                  .BindForm(Self);
end;

Conn - Instancia a Interface iSimpleQuery passando o componente de conexão que o SimpleORM irá trabalhar.

DAOPedido - Instância o DAO para uma Entidade Mapeada, passando a Classe de Mapeamento como Atributo Genérico.

New - Recebe a Interface de Conexão iSimpleQuery.

DataSource- Você pode informar um DataSource para que os dados sejam armazenados nele para facilitar seu processo de listagem de dados, podem linkar ao DBGrid para exibição dos mesmos.

Bind - Você pode informar o formulário que deseja que o SimpleORM faça o Bind automatico entre a Classe e os Componentes da tela (Edit, Combo, CheckBox, RadioButton e etc...)

MAPEAMENTO DO BIND DO FORMULÁRIO

Quando você fizer o mapeamento Bind do Formulário, não precisará ligar manualmente os campos da classe ao Edits, o SimpleORM faz isso automáticamente, basta você realizar o mapeamento correto conforme abaixo.

type
  TForm1 = class(TForm)
    [Bind('CLIENTE')]
    Edit1: TEdit;
    [Bind('ID')]
    Edit2: TEdit;
    [Bind('VALORTOTAL')]
    Edit3: TEdit;
    Button2: TButton;
    [Bind('DATAPEDIDO')]
    DateTimePicker1: TDateTimePicker;

No atributo Bind de cada campo, você deve informar o nome da Property correspondente na Classe Mapeada do banco de dados ou o nome do campo na tabela do banco de dados, ATENÇÃO de qualquer forma a Classe deve estar mapeada corretamente.

INSERT COM BIND

begin
  DAOPedido.Insert;
end;

INSERT COM OBJETO

var
  Pedido : TPEDIDO;
begin
  Pedido := TPEDIDO.Create;
  try
    Pedido.ID := StrToInt(Edit2.Text);
    Pedido.CLIENTE := Edit1.Text;
    Pedido.DATAPEDIDO := now;
    Pedido.VALORTOTAL := StrToCurr(Edit3.Text);
    DAOPedido.Insert(Pedido);
  finally
    Pedido.Free;
  end;
end;

INSERT COM OBJETO HERDADO DE TSimpleEntity E COM VALIDAÇÃO

var
  Cliente: TCliente;
begin
  Cliente := TCliente.Create;
  try
    // PEGA OS VALORES DA TELA E PREENCHE O OBJETO VIA BIND
    Cliente.Parse(Self); 

    // VALIDA SEGUNDO ANOTAÇÕES DO OBJETO
    TSimpleValidator.Validate(Cliente); 
    
    // INSERE "CLIENTE" NO BANCO DE DADOS
    DAOCliente.Insert(Cliente);
  finally
    Cliente.Free;
  end;
end;

UPDATE COM BIND

begin
  DAOPedido.Update;
end;

UPDATE COM OBJETO

var
  Pedido : TPEDIDO;
begin
  Pedido := TPEDIDO.Create;
  try
    Pedido.ID := StrToInt(Edit2.Text);
    Pedido.CLIENTE := Edit1.Text;
    Pedido.DATAPEDIDO := now;
    Pedido.VALORTOTAL := StrToCurr(Edit3.Text);
    DAOPedido.Update(Pedido);
  finally
    Pedido.Free;
  end;
end;

UPDATE COM OBJETO HERDADO DE TSimpleEntity E COM VALIDAÇÃO

var
  Cliente: TCliente;
begin
  Cliente := TCliente.Create;
  try
    Cliente.Parse(Self); 
    TSimpleValidator.Validate(Cliente); 
    DAOCliente.Update(Cliente);
  finally
    Cliente.Free;
  end;
end;

DELETE COM BIND

begin
  DAOPedido.Delete;
end;

DELETE COM OBJETO

 var
  Pedido : TPEDIDO;
begin
  Pedido := TPEDIDO.Create;
  try
    Pedido.ID := StrToInt(Edit2.Text);
    DAOPedido.Delete(Pedido);
  finally
    Pedido.Free;
  end;
end;

SELECT

Você pode executar desde operações simples como trazer todos os dados da tabela, como filtrar campos e outras instruções SQL,

executando a instrução abaixo você retornará todos os dados da tabela

  DAOPedido.Find;

Abaixo um exemplo de todas as operações possíveis no SimpleORM

begin
  DAOPedido
    .SQL
      .Fields('Informe os Campos que deseja trazer separados por virgula')
      .Join('Informe a Instrução Join que desejar ex INNER JOIN CLIENTE ON CLIENTE.ID = PRODUTO.CLIENTE')
      .Where('Coloque a Clausula Where que desejar ex: CODIGO = 1')
      .OrderBy('Informe o nome do Campo que deseja ordenar ex: ID')
      .GroupBy('Informe os campos que deseja agrupar separados por virgula')
    .&End
  .Find;
end;

Você também pode retornar uma Lista de Objetos para trabalhar com ela manualmente, abaixo um exemplo de como trazer a lista e trabalhar com ela exibindo todos os valores em um Memo

var
  Pedidos : TObjectList<TPEDIDO>;
  Pedido : TPEDIDO;
begin
  Pedidos := TObjectList<TPEDIDO>.Create;
  DAOPedido.Find(Pedidos);
  try
    for Pedido in Pedidos do
    begin
      Memo1.Lines.Add(Pedido.CLIENTE + DateToStr(Pedido.DATAPEDIDO));
    end;
  finally
    Pedidos.Free;
  end;
end;

Grupo do telegram

Esse grupo tem como objetivo ajudar seus integrantes em assuntos diversos ao uso do componente, e colaboração para a evolução desse maravilhoso ORM (Object-relational mapping). Acesse com esse link para participar do Grupo SimpleORM