Tecnologia do Blogger.
RSS

Re: [androidbrasil-dev] ORM greenDao - PK notNull autoIncrement

Vou explicar um pouco sobre o que me me fez escolher o HADI e o que eu queria dizer sobre "projetos pequenos".

Existem basicamente 2 tipos de ORM.
1 - Os que geram as classes baseados em algum tipo de dados (schema, db, etc) - Aqui entra o GreenDAO
2 - Os que trabalham com as classes em tempo de execução utilizando reflection. - Aqui entra o HADI, ActiveRecord, etc...

Nos 2 casos existem prós e contras, e a escolha vai variar de acordo com a sua necessidade.

Vou falar sobre o meu caso. Meus projetos são de produtos que tem um ciclo de vida grande. São bussines Apps, que ficaqm no mercado por muito tempo, portanto a facilidade e velocidade na manutenção é um fator primordial no nosso negocio. Neste cenário o GreenDAO dá muito trabalho porque qualquer alteração precisa re-gerar as coisas.
Eu tenho que me preocupar com o modelo de negocio, com as regras e não como os dados são persistidos, por isso os ORMs do item 2 se adaptam melhor a minha realidade.

Quando falei do "projeto simples", não é pr ater medo ou receito.
Ocorre que reflection tem um custo maior, pois ele precisar analisar a classe pra saber fazer o mapeamento modelo>base e base<modelo.

Se você vai trabalhar com grandes quantidades de dados (milhões de registros, aqui eu digo MILHÕES MESMO) talvez vc tenha uma melhoria de desempenho utilizando os ORMs do item 1.

Fiz vários testes de leitura e gravação simultaneos e os resultados do HADI foram bons. Tanto que estamos utilizando ele em 4 projetos nos momento. Todos são apps corporativas, com muito uso mesmo e ninguém reclama de desempenho. ;)

Ahhhhh... um fator que não falei foi sobre relacionamento. O HADI não faz relacionamento automaticamente (Lazy/Eager Load) pois acho que isso não é nem recomendado pra um ambiente mais restritivo como o Android. Quem nunca usou Hibernate e penou pra configurar o carregamento dos "objetos filhos"?! :)

O ideal é sempre testar por conta e tirar suas conclusões! :)

Ahhhhhh... e o que EU mais sinto falta no Android é do LINQ do .NET! :D


--
Abraços,
Pedro Subutzki
__________________________________________

HADI - Makes SQLite in Android easy and simple
https://github.com/PepeuCps/Hadi







Em 31 de agosto de 2012 14:50, Felipe Aron <felipearon@gmail.com> escreveu:
Então, to estudando ORM para Android. Achei interessante o greenDAO, mas estou no básico ainda, estudando pra ver até onde vai.

Vou dar uma estudada no HADI também, pra ver seu funcionamento. :)

O meu "medo" é quando dizem que é bom pra "projetos simples". rssrs

Saudade do FluentNHibernate do .NET, hehe.

Em 31 de agosto de 2012 14:46, Pedro Subutzki <Pepeu> <falecompepeu@gmail.com> escreveu:

Bom... ainda falando sobre ORMs, eu já testei vários e não gostei do GreenDAO! :)

Um projeto que gostei muito foi o Aliendroid-ActiveRecord (https://github.com/marloncarvalho/aliendroid-activerecord) feito pelo Marlon Carvalho. Testei o projeto e funcionou muito bem, porém só achei um problema nele. O Aliendroid-ActiveRecord não funciona em classes que extendem IntentServices ou Services. :(
Foi por isso que eu começei a trabalhar com o HADI.

De qualquer forma, teste vários ORMs e veja qual se adapta melhor a sua necessidade! :)


--
Abraços,
Pedro Subutzki
__________________________________________
HADI - Makes SQLite in Android easy and simple
https://github.com/PepeuCps/Hadi



Em 31 de agosto de 2012 14:37, Pedro Subutzki <Pepeu> <falecompepeu@gmail.com> escreveu:

Então... no caso, o HADI funciona de forma diferente.
Ele usa reflection nas classes (modelos) procurando pelos annotations, e apesar de usar reflection ele tem um bom desempenho.

No HADI se vc acrescentar mais uma propriedade na sua classe, vc não precisa RE-gerar o modelo (como o caso do GreenDAO), ou sair varrendo o codigo mudando seus DAOs (caso do pessoal que não usa ORM). Com o HADI não há essa necessidade! :)

Só reforço que ele não é uma bala de prata e não vai resolver todos os problemas da galaxia, mas pra projetos simples ele supre 100%.
Ganhamos muito tempo no desenvolvimento aqui!

--
Abraços,
Pedro Subutzki
__________________________________________
HADI - Makes SQLite in Android easy and simple
https://github.com/PepeuCps/Hadi



Em 31 de agosto de 2012 14:28, Felipe Aron <felipearon@gmail.com> escreveu:

Isso mesmo, eu crio um Schema e ele gera as classes pra mim.

Em 31 de agosto de 2012 14:03, Pedro Subutzki <Pepeu> <falecompepeu@gmail.com> escreveu:

Sim... No HADI ele cria o DB automaticamente (vc escolhe o nome).
Com relação a chave, ela depende de vc colocar o annotation na propriedade.
Segue exemplo de uma classe:

import com.the9tcat.hadi.annotation.Column;
import com.the9tcat.hadi.annotation.Table;

@Table(name="Livro")
public class Book {

    @Column(autoincrement=true)
    public int id;

    @Column(name="sn")
    public String sn;

    @Column(name = "Titulo")
    public String name;
}

Se me lembro bem o GreenDAO ele gera as classes baseado num Schema, né?!


--
Abraços,
Pedro Subutzki
__________________________________________
HADI - Makes SQLite in Android easy and simple
https://github.com/PepeuCps/Hadi



Em 31 de agosto de 2012 13:05, Felipe Aron <felipearon@gmail.com> escreveu:

Pedro, uma pergunta - esse HADI cria o db pra você automaticamente?

Se cria, ele cria o campo PK autoincrement NULL?

Em 31 de agosto de 2012 11:48, Pedro Subutzki <Pepeu> <falecompepeu@gmail.com> escreveu:

Olá Felipe,
Infelizmente não posso ajudar sobre o GreenDAO, mas se quiser testar um outro ORM, teste o HADI:
https://github.com/PepeuCps/Hadi

Sobre ele, poderei responder as suas dúvidas.
Qualquer coisa me manda um e-mail que te envio o ultimo JAR do projeto. :)


--
Abraços,
Pedro Subutzki
__________________________________________
HADI - Makes SQLite in Android easy and simple
https://github.com/PepeuCps/Hadi



Em 31 de agosto de 2012 09:07, Felipe Aron <felipearon@gmail.com> escreveu:

Galera, to começando a estudar o ORM greenDao e já pintou uma dúvida que não encontrei na documentação.

Tenho o seguinte schema:

        public static void addPessoa(Schema schema) {
Entity pessoa = schema.addEntity("Pessoa");
pessoa.addIdProperty()
.autoincrement()
.notNull();
pessoa.addStringProperty("nome")
.notNull();
}

Na documentação cria um IdProperty() sem "notNull". Acho estranho uma PK não ser "notNull" por isso eu adicionei.

Porém agora com "notNull" como fica a inserção? Se fizer assim dá erro de código:

pessoaDao.insert(new Pessoa(null, "Felipe"));

Porém se ficar assim, ele grava, mas não incrementa automático, incluindo o "id" indicado no construtor:

pessoaDao.insert(new Pessoa(0, "Felipe"));

Como resolver isso?

--
Analista-Programador







--
Analista-Programador







--
Analista-Programador









--
Analista-Programador




  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

0 comentários:

Postar um comentário