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.
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.
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).
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.
SimpleInterface,
SimpleDAO,
SimpleAttributes,
Dependendo do seu driver de Conexão utilizar as Uses SimpleQueryFiredac ou SimpleQueryRestDW
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...)
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.
begin
  DAOPedido.Insert;
end;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;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;begin
  DAOPedido.Update;
end;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;var
  Cliente: TCliente;
begin
  Cliente := TCliente.Create;
  try
    Cliente.Parse(Self); 
    TSimpleValidator.Validate(Cliente); 
    DAOCliente.Update(Cliente);
  finally
    Cliente.Free;
  end;
end;begin
  DAOPedido.Delete;
end; var
  Pedido : TPEDIDO;
begin
  Pedido := TPEDIDO.Create;
  try
    Pedido.ID := StrToInt(Edit2.Text);
    DAOPedido.Delete(Pedido);
  finally
    Pedido.Free;
  end;
end;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;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