JaQu - .Net LINQ for Java JDBC

25 respostas
E

http://www.h2database.com/html/frame.html?jaqu.html&main

What is JaQu

JaQu stands for Java Query and allows to access databases using pure Java. JaQu replaces SQL, JDBC, and O/R frameworks such as Hibernate. JaQu is something like LINQ for Java (LINQ stands for “language integrated query” and is a Microsoft .NET technology). The following JaQu code:

Product p = new Product(); List<Product> soldOutProducts = db.from(p).where(p.unitsInStock).is(0).select();

Advantages

Unlike to SQL, JaQu can be easily integrated in Java applications. Because JaQu is pure Java, Javadoc and auto-complete are supported. Type checking is performed by the compiler. JaQu fully protects against SQL injection.
Why in Java?

Most people use Java in their application. Mixing Java and another language (for example Scala or Groovy) in the same application is complicated. It would be required to split the code to access the database and the application code.
Current State

JaQu is not yet stable, and not part of the h2.jar file. However the source code is included in H2, under:

* src/test/org/h2/test/jaqu/* (samples and tests)
* src/tools/org/h2/jaqu/* (framework)

Requirements

JaQu requires Java 1.5. Annotations are not need. Currently, JaQu is only tested with the H2 database engine, however in theory it should work with any database that supports the JDBC API.

25 Respostas

P

O framework parece ser legal, Mas parece que ele faz o que o hibernate ja faz

T

Isso não passa de uma DSL.
Na Mundo Java de mês, saiu uma matéria explicando a técnica utilizada por essf framework, de encadear chamadas de método.
Não creio que seja revolução. Ainda prefiro seguir a especificação do JPA, e, em alguns casos, usar o JDBC Templates do Spring.

E

Sim, só que bem mais simples ao estilo Linq.

Também nada impede de usar o Hibernate e o JaQu juntos, para fazer as querys o JaQu pode ser mais intuitivo e simples.

Mais a respeito:

http://sustainablesoftware.wordpress.com/2008/07/31/jaqu-another-lightweight-sql-interface-for-java/

D

Uma DSL? Não seria só uma interface fluente não? Eu ACHO que não podemos chamar isso de DSL…

Edit:
Bem… Acho que pode sim… http://fragmental.tw/research-on-dsls/language-oriented-programming-lop/language-adaption/
Shoes, qualquer uso de fluent interface pode ser considerado DSL? Quando seria possível e quando não?

T

David:
Uma DSL? Não seria só uma interface fluente não? Eu ACHO que não podemos chamar isso de DSL…

Edit:
Bem… Acho que pode sim… http://fragmental.tw/research-on-dsls/language-oriented-programming-lop/language-adaption/
Shoes, qualquer uso de fluent interface pode ser considerado DSL? Quando seria possível e quando não?

Não sou dos mais entedidos disso, mas uma DSL interna pode ser considerada por muitos, uma interface fluente. Acho que esses conceitos não são tão fáceis de se distinguir. Eu mesmo as vezes me pergunto qual é a diferença…

P

Hunm… nada haver o que eu falei

L

Isso tá anos luz de fazer aquilo que o LINQ permite. Cade expression trees? Cade extension methods?

Isso é uma fluent API meia boca p/ acessar banco de dados. LINQ é muito mais que isso.

E

Claro q LINQ é muito mais q isto… mas pelo menos é melhor q nada, e é verdade eu me contento com pouco :stuck_out_tongue:

R

louds:
Isso tá anos luz de fazer aquilo que o LINQ permite. Cade expression trees? Cade extension methods?

Isso é uma fluent API meia boca p/ acessar banco de dados. LINQ é muito mais que isso.

Isso que é saber dar uma força. :slight_smile:

T

Os desenvolvedores do projeto dizem que o Framework nem foi testado com outros Bancos de Dados, somente com o deles.
Poxa, não sei se utilizaria esse cara, nem que fosse para testes. Nem eles mesmos se dão ao trabalhar de testar o treco… :roll:
Tudo bem que a idéia é “funfar” com o JDBC em si, mas sabemos como cada banco tem suas peculiaridades!

L

Rodrigo.Lima:
louds:
Isso tá anos luz de fazer aquilo que o LINQ permite. Cade expression trees? Cade extension methods?

Isso é uma fluent API meia boca p/ acessar banco de dados. LINQ é muito mais que isso.

Isso que é saber dar uma força. :)

A questão é que o LINQ for SQL é o recurso menos interessante de todos.

O grande valor tá em coisas como LINQ for objects, PLINQ (Parallel LINQ), expression trees e todo plumbind por traz
que permite escrever coisas como LINQ for NHibernate de maneira razoavelmente fácil.

Acho incrível como a comunidade Java é em geral incapaz de ver além do LINQ for SQL.

R

louds, a comunidade .NET em geral também não enxerga muito mais longe do que a comunidade Java no que diz respeito ao LINQ…

R

louds:
Rodrigo.Lima:
louds:
Isso tá anos luz de fazer aquilo que o LINQ permite. Cade expression trees? Cade extension methods?

Isso é uma fluent API meia boca p/ acessar banco de dados. LINQ é muito mais que isso.

Isso que é saber dar uma força. :)

A questão é que o LINQ for SQL é o recurso menos interessante de todos.

O grande valor tá em coisas como LINQ for objects, PLINQ (Parallel LINQ), expression trees e todo plumbind por traz
que permite escrever coisas como LINQ for NHibernate de maneira razoavelmente fácil.

Acho incrível como a comunidade Java é em geral incapaz de ver além do LINQ for SQL.


Concordo contigo, a microsoft está copiando e melhorando várias coisas do java, já está na hora de ter uma coisa parecida com LINQ em java mesmo.

O legal mesmo vai ser o linq to entities, uma especie de hibernate e linq juntos.

W

Nao sou de defender microsoft ( mesmo trabalhando com C# ) mas isso precisa de muito feijao com arroz pra fazer 1% do que o LINQ faz hehehe

//Daniel

P

David:

Edit:
Bem… Acho que pode sim… http://fragmental.tw/research-on-dsls/language-oriented-programming-lop/language-adaption/
Shoes, qualquer uso de fluent interface pode ser considerado DSL? Quando seria possível e quando não?

Eu estou reescrevendo todo este material de DSL no meu blog mas basicamente eu conheço 2 formas de pensar:

1 - (Fowler) Internal DSL e Fluent Interface é a mesma coisa
2 - (A que eu defendo) Fluent Interface é uma Language Adaption mas não necessariamente uma DSL - Uma Fluent interface lida com os mesmos conceitos da host language, ela não é Domain-Specific.

X

Olha eu andei funçando o LINQ aqui e pude perceber que ele esta 1000 anos -luz a frente do HIbernate, TopLink, JPA e outras especficações desse tipo do JAVA. Umas das coisas boas do LINQ foi o fato de não precisar escrever nenhuma linha de códigos XML. Mas uma coisa sou sincero a dizer, o LINQ deixa o programador cego. Por que? Porque voce não sabe o que acontece por baixo da execução do seu código.

P

Acho que você está confundindo as coisas. LINQ não é um equivalente ao Hibernate, tanto que a Microsoft tem seu próprio (claro) Entity Framework (http://msdn.microsoft.com/en-us/library/aa697427(VS.80).aspx) que possui suporte à LINQ

X

Acho que você está confundindo as coisas. LINQ não é um equivalente ao Hibernate, tanto que a Microsoft tem seu próprio (claro) Entity Framework (http://msdn.microsoft.com/en-us/library/aa697427(VS.80).aspx) que possui suporte à LINQ

paulofafism
JavaBaby

Membro desde: 02/05/2006 15:30:50
Mensagens: 81
Offline
O framework parece ser legal, Mas parece que ele faz o que o hibernate ja faz

P

Ele estava falando do JaQu não do LINQ.

E

XML!? Quem ainda usa Hibernate com XML!? Eu não uso nada de XML com o Hibernate… para isto q serve Annotations e as configurações vc pode carregar via código sem XML… lol

E LINQ parece simples para coisas simples, coisas complicadas começam a ficar meio confusas de interpretar, mas também é uma questão de hábito, mas tb nao gosto a mistureba q é, no meio do código ter código “SQL”, acho q fica meio zuado, mas também é uma questão de hábito.

Q LINQ é bom é… mas que dá para viver sem dá, e se fizerem algo parecido/melhor para Java seria excelente, visto q o C# já copiou muito o Java, não custa nada o Java uma vez na vida copiar uma coisa do .Net…

C

Atualmente ao meu ver Interface fliente e uma forma de estar em dia com as ultimas tendencias da sopa de letrinhas sem que pra isso seja necessario mudancas radicais de principios em relacao a como se desenvolver software.

C

Complementando ao que o pcalcado disse: “uma fluent interface lida com os mesmos conceitos da host language, ela nao e domain-specific”

Mas a principal diferenca na verdade e que interfaces fluentes apenas fornecem uma visao para aquela parte do sistema enquanto o processo envolvido no desenvolvimento de uma dsl e o processo envolvido na criacao de uma linguagem, ou seja, nao e algo que se define numa reuniao de comitê. Requer a evolucao da linguagem junto com o sistema desenvolvido.

M

Na verdade o LINK utiliza xml (e outras tranqueiras de configuração) para mapeamento sim, a diferença é que o visual studio gera o xml caso você estiver usando o sqlserver e visual studio.

O netbeans tb tem esta funcionalidade, no caso gera as classes com annotations do JPA.
Exemplo você cria algumas tabelas num mysql da vida configura a conexão no netbeans ele gera as classes TUDO “igual” o visual studio, se não me engano o netbeans gera até os CRUD em jsf e em swing…rsrs mas para isto tem que ter memória :slight_smile:

Abraço

P

Mauricio de Mello:
Na verdade o LINK utiliza xml (e outras tranqueiras de configuração) para mapeamento sim, a diferença é que o visual studio gera o xml caso você estiver usando o sqlserver e visual studio.

O netbeans tb tem esta funcionalidade, no caso gera as classes com annotations do JPA.
Exemplo você cria algumas tabelas num mysql da vida configura a conexão no netbeans ele gera as classes TUDO “igual” o visual studio, se não me engano o netbeans gera até os CRUD em jsf e em swing…rsrs mas para isto tem que ter memória :slight_smile:

Oi, Maurício,

LINQ (com Q mesmo) não é o Entity Framework e não exige configuração por si só. LINQ é uma extensão à C#, não um framework de persistência. Você está provavelmente se referindo ao Microsoft Entity Framework.

M

Exato…

Só estava informando o amigo que o java também tem suas facilidades. basta conhece-las.
Pessoal tem mania de dizer que em java tem que configurar as coisas tudo na mão. E .net é mágico. gosto de .net mas não é bem assim as coisas.

Obrigado pela correção do “Q” sempre me engano. :slight_smile:

Abraço

Criado 1 de agosto de 2008
Ultima resposta 11 de ago. de 2008
Respostas 25
Participantes 13