Estou aprendendo Java EE e baixei o eclipse com glassfish para o mesmo. Eu vi alguns exemplos e também li a documentação da Oracle para saber tudo sobre o Java EE 5. Conectar-se a um banco de dados foi muito simples. Abri um projeto web dinâmico, criei uma sessão EJB, usei o EntityManager e com os métodos get consegui acessar a tabela de dados armazenados.
Para meu próximo projeto, criei uma classe simples e, em seguida, acessei alguma tabela de banco de dados. O primeiro problema que encontrei foi que o atributo PersistenceUnit só seria reconhecido por EJB, Servlet etc, e não por uma simples classe java. Então, eu não poderia usar a forma EntityManager (ou posso?)
Pediram-me para usar o método "JDBC". O primeiro problema que encontrei foi conseguir a conexão com o banco de dados. Parece que tudo isso deve estar codificado. Eu tinha um persistence.xml com o qual poderia facilmente configurar a conexão do banco de dados. Até mesmo configurar um driver para o DB foi fácil. Além disso, não há métodos get / set no JDBC para acessar entidades de tabela.
Como posso entender JPA e persistência em relação a JDBC? O que foi pensado para JPA? Por que existem métodos set / get? Alguém pode lançar alguma luz sobre a essência desses dois e quais são os prós / contras sem "jargões" ?? Por favor, também sugira alguns links. Uma simples pesquisa no Google por diferenças de JPA e JDBC me levou a alguns sites cheios de "terminologia" que não consegui acompanhar :(
Respostas:
Em termos leigos:
JDBC é um padrão para conectar a um DB diretamente e executar SQL contra ele - por exemplo
SELECT * FROM USERS
, etc. Os conjuntos de dados podem ser devolvidas que você pode segurar em seu aplicativo, e você pode fazer todas as coisas habituais, comoINSERT
,DELETE
, procedimentos armazenados executados, etc. É uma das tecnologias subjacentes por trás da maioria do acesso ao banco de dados Java (incluindo provedores JPA).Um dos problemas com aplicativos JDBC tradicionais é que muitas vezes você pode ter algum código de baixa qualidade, onde muitos mapeamentos entre conjuntos de dados e objetos ocorrem, a lógica é misturada com SQL, etc.
JPA é um padrão para Mapeamento Relacional de Objeto. Esta é uma tecnologia que permite mapear entre objetos em tabelas de código e de banco de dados. Isso pode "ocultar" o SQL do desenvolvedor, de modo que todos eles lidem com classes Java, e o provedor permite que você os salve e carregue magicamente. Principalmente, arquivos de mapeamento XML ou anotações em getters e setters podem ser usados para informar ao provedor JPA quais campos em seu objeto mapeiam para quais campos no banco de dados. O provedor JPA mais famoso é o Hibernate , portanto, é um bom lugar para começar com exemplos concretos.
Outros exemplos incluem OpenJPA, toplink, etc.
Nos bastidores, o Hibernate e a maioria dos outros provedores de JPA escrevem SQL e usam JDBC para ler e gravar de e para o banco de dados.
fonte
A principal diferença entre JPA e JDBC é o nível de abstração.
JDBC é um padrão de baixo nível para interação com bancos de dados. JPA é um padrão de nível superior para o mesmo propósito. O JPA permite que você use um modelo de objeto em seu aplicativo, o que pode tornar sua vida muito mais fácil. O JDBC permite que você faça mais coisas diretamente com o banco de dados, mas requer mais atenção. Algumas tarefas não podem ser resolvidas de forma eficiente usando JPA, mas podem ser resolvidas de forma mais eficiente com JDBC.
fonte
JDBC é uma especificação de nível muito inferior (e mais antiga) do que JPA. Em seus fundamentos básicos, JDBC é uma API para interagir com um banco de dados usando SQL puro - enviando consultas e recuperando resultados. Não tem noção de objetos ou hierarquias. Ao usar JDBC, cabe a você traduzir um conjunto de resultados (essencialmente uma matriz de linha / coluna de valores de uma ou mais tabelas de banco de dados, retornada por sua consulta SQL) em objetos Java.
Agora, para entender e usar o JDBC, é essencial que você tenha algum conhecimento e compreensão prática de SQL. Com isso também vem uma visão necessária sobre o que é um banco de dados relacional, como você trabalha com ele e conceitos como tabelas, colunas, chaves e relacionamentos. A menos que você tenha pelo menos um conhecimento básico de bancos de dados, SQL e modelagem de dados, não será capaz de fazer muito uso de JDBC, pois na verdade é apenas uma abstração tênue em cima dessas coisas.
fonte
JDBC é o predecessor do JPA.
JDBC é uma ponte entre o mundo Java e o mundo dos bancos de dados. Em JDBC, você precisa expor todos os detalhes sujos necessários para operações CRUD, como nomes de tabelas, nomes de colunas, enquanto em JPA (que está usando JDBC por baixo), você também especifica esses detalhes de metadados de banco de dados, mas com o uso de anotações Java.
Portanto, o JPA cria consultas de atualização para você e gerencia as entidades que você pesquisou ou criou / atualizou (ele também faz mais).
Se você quiser fazer JPA sem um contêiner Java EE, o Spring e suas bibliotecas podem ser usados com as mesmas anotações Java.
fonte