Skip to content

ElielSouza/SimpleORM

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Logo da Minha Empresa

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 academiadocodigo/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

About

ORM Simples para Aplicações Delphi

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Pascal 100.0%