Tecnologia do Blogger.
RSS

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

Aqui na empresa onde trabalho, montei um projeto Android para um cliente para acerto de sacolas de revendedoras. Funciona legal, mas gera bastante manutenção. O controle de persistência é modo "chuck-norris", no braço, porém tenho um controle melhor do que acontece no camarim. rs.


Hoje, com o conhecimento que adiquiri, eu preferia refazer enxugando muita coisa, mas não farei isso por motivos da empresa.

Eu to pra iniciar agora um projeto financeiro pessoal, e pra isso estou iniciando os estudos com ORM. Resolvi começar com o greenDao. 

Achei interessante pelo fato de criar um schema e a partir desse gerar minhas classes e conexões de persistência. Além do mais criar o db automático pra mim, inclusive atualizações.

Por enquanto criei o schema básico do db, e estou iniciando testes de inserção, update, deleção e listas...

Ele tem um filtro que lembra um pouco o LINQ, mas nem compa ao real do .NET:


O que vi na documentação é Joins, que ele não faz, ai precisa usar o rawQuery puro mesmo. :(

O HADI, você cria seus "model" e "dao" usando o nativo OpenHelper? 

Em 31 de agosto de 2012 15:12, Pedro Subutzki <Pepeu> <falecompepeu@gmail.com> escreveu:
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







--
Analista-Programador

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

0 comentários:

Postar um comentário