Java 8 finalmente chegou! Opere o banco de dados.
O método funcional de processamento de dados
O Java 8 não apenas adiciona suporte funcional, mas também expande a classe de coleta por novos dados de processamento de funções.
Por exemplo, suponha que você tenha uma coleção de coleção: Cliente: Cliente:
Coleção <Cliente> clientes;
Se você estiver interessado apenas em clientes da Bélgica, terá todos os objetos do cliente e salvará apenas o que precisa.
Coleção <lusterge> belgas = novo ArrayList <() ();
Isso não apenas custa 5 linhas de código, mas não é muito abstrato. Código rosqueado para reescrever todo o código.
Com o Java 8, apenas uma linha de código pode obter os mesmos recursos. Basta fazer filtração.
Clientes.stream ().
O código da versão Java 8 acima não é apenas mais curto, mas também mais fácil de entender. Desperte o tempo na interpretação do código no ciclo de interpretação para entender o que está fazendo por seus dados.
O que devo fazer se você deseja executar este código simultaneamente?
Clientes.parallelStream ().
O mais emocionante é que esse código de estilo funcional também é aplicável ao banco de dados
Use um método de função no banco de dados
Tradicionalmente, os programadores precisam usar um banco de dados especial para consultar a declaração para acessar os dados do banco de dados.
Preparado STEPTATEMENT S = CON.Preparestatement ("Select *" + "do cliente C" + "onde C.Country =?");A maioria desses código é a String, que fará com que o compilador não encontre erros e esse código apressado causará problemas de segurança. Forneça linguagem de consulta de banco de dados, você pode resolver verificações e problemas de segurança errados. Ou use a ferramenta de mapeamento de relacionamento de objeto para evitar um grande número de código chato, mas eles só podem ser usados no acesso geral às consultas.
Use Java 8 para consultar o banco de dados por API funcional. Por exemplo, o JINQ é um projeto de código aberto e qual a futura API do banco de dados que ele explora pode possibilitar a programação funcional. Aqui está uma consulta de banco de dados usando Jinq:
Clientes.
Esse código é quase o mesmo que o código usando uma API de streaming. Quando o código é executado, o JINQ se traduzirá automaticamente em um código de consulta de banco de dados, assim como a consulta JDBC antes.
Nesse caso, mesmo que você não tenha aprendido algum novo idioma de consulta de banco de dados, pode escrever uma consulta eficiente em banco de dados. Você pode usar o mesmo estilo de código para coletar no Java. Você não precisa de um compilador Java especial ou máquina virtual. Toda a compilação de código e execução no Java 8 JDK comum. Se o seu código estiver errado, o compilador os encontrará e o denunciará a você, assim como um código Java comum.
O JINQ suporta a mesma consulta complexa que o SQL92. O algoritmo do código Java de tradução em uma consulta de banco de dados é muito flexível, desde que possa aceitá -lo, pode traduzir. Por exemplo, o JINQ pode traduzir a consulta do banco de dados abaixo, embora seja complicada.
Clientes ctctctctctctct seu papel trabalho de trabalho Trabalho de trabalho de trabalho Trabalho de trabalho Trabalho de trabalho Wor Work Work Worker.
Como você pode ver, a programação funcional do Java 8 é muito adequada para a consulta de banco de dados. E a consulta é compacta e mesmo complicados consultas pode ser competente.
Operação interna
Mas como você trabalha? Como os compiladores Java comuns podem converter o código Java em consulta de banco de dados? O que há de especial no Java 8 para tornar isso possível?
A chave para apoiar esses novos PIs de banco de dados que suportam essas funções é um método de análise de bytecode chamado "Execução simbólica". Embora seu código seja compilado por um compilador Java comum e seja executado em uma máquina virtual Java comum, o JINQ pode analisar e criar uma consulta de banco de dados quando você for compilado o código Java. Ao usar a API Java 8 Streams, é frequentemente descoberto que, ao analisar funções curtas, o efeito de trabalho da execução simbólica é o melhor.
Para entender como essa execução simbólica funciona, a maneira mais fácil é usar um exemplo. Vamos verificar como as consultas a seguir são convertidas em linguagem de consulta SQL por Jinq:
Clientes. Onde (c-> c.getCountry (). Igual ("bélgica")))))))))) Inicialmente, os clientes variáveis são uma coleção, e sua consulta de banco de dados correspondente é:
Selecione * dos clientes C
Então, o método WHERE () é chamado e uma função é passada para ele. No método WHERE (), o JINQ abre o arquivo .class desta função para obter o código de bytes compilado por esta função para análise. Neste exemplo, não use o código de bytes real, vamos usar algumas instruções simples para representar o código de bytes desta função:
d = c.getCountry () e = "bélgica" e = d.equals (e) retornar e
Aqui, assumimos que a função foi compilada pelo compilador Java nessas quatro instruções. Quando o método WHERE () é chamado, Jinq os vê. Como o Jinq pode entender esses código?
O JINQ é analisado pela execução do código. Mas o JinQ não executa o código diretamente. É um código de operação "abstrato": sem variáveis reais e valores reais, o JinQ usa símbolos para indicar todos os valores ao executar o código. É por isso que essa análise é chamada de "execução simbólica".
O JINQ executa cada instrução e rastreia tudo o que todos os efeitos colaterais ou alterações de código durante o estado do programa. A seguir, é apresentado um gráfico que mostra todos os efeitos colaterais encontrados quando o JINQ executa as quatro linhas de código na execução simbólica.
Exemplo de execução simbólica
Na figura, você pode ver que, depois que a primeira instrução está em execução, o Jinq descobriu dois efeitos colaterais: a variável D mudou e o método customer.getCountry () foi chamado. Por ser a execução simbólica, a variável d não fornece um valor real de um real, como "EUA" ou "Dinamarca", que é atribuído a um valor simbólico de c.getCountry ().
Depois que todas essas instruções são executadas, Jinq simplificou os efeitos colaterais. Como a variável D e E são variáveis locais, quaisquer variáveis serão descartadas após a saída da função, para que esses efeitos colaterais possam ser ignorados. O JinQ também sabe que o cliente. Como resultado, o JinQ pode concluir que essa função produzirá apenas um papel e retornará C.GetCountry ().
Depois que o JinQ entendeu as funções passadas no método WHERE (), ele pode misturar o conhecimento da consulta de banco de dados e fornecer uma nova consulta de banco de dados na coleção de clientes.
Gere consulta de banco de dados
É assim que o JINQ gera uma consulta de banco de dados a partir do seu código. O uso da execução simbólica significa que esse método é bastante poderoso para diferentes modos de código de diferentes compiladores Java. Se o código encontrado pelo JINQ tiver os efeitos colaterais que não puderem ser convertidos em uma consulta de banco de dados, o JINQ manterá seu código inalterado. Como tudo está escrito no código Java normal, o JINQ pode executar esses códigos diretamente e seu código produzirá os resultados esperados.
Este exemplo de tradução simples deve permitir que você entenda como consultar a tradução funciona. Você pode ter certeza de que esses algoritmos podem gerar corretamente consultas de banco de dados a partir do seu código.
Bela perspectiva
Espero ter deixado você provar uma nova maneira de o trabalho de banco de dados trazido por Java 8 em Java. A programação funcional suportada pelo Java 8 permite que você escreva código para o banco de dados escrever código para a coleção Java. Espera -se que as APIs de banco de dados existentes sejam estendidas para suportar esses tipos de consulta.