Introdução ao ActiveJDBC

Introdução ao ActiveJDBC

1. Introdução

ActiveJDBC é um ORM leve seguindo as idéias centrais deActiveRecord, o ORM primário de Ruby on Rails.

Ele se concentra emsimplifying the interaction with databases by removing the extra layer of typical persistence managerse se concentra no uso de SQL em vez de criar uma nova linguagem de consulta.

Além disso, ele fornece sua própria maneira de escrever testes de unidade para a interação do banco de dados por meio da classeDBSpec.

Vamos ver como essa biblioteca difere de outros ORMs Java populares e como usá-la.

2. ActiveJDBC vs outros ORMs

O ActiveJDBC possui diferenças gritantes em comparação com a maioria dos outros ORMs Java. It infers the DB schema parameters from a database, thus removing the need for mapping entities to underlying tables.

No sessions, no persistence managers, sem necessidade de aprender uma nova linguagem de consulta, sem getters / setters. A biblioteca em si é leve em termos de tamanho e número de dependências.

Essa implementação incentiva o uso de bancos de dados de teste que são limpos pela estrutura após a execução dos testes, reduzindo assim o custo de manutenção dos bancos de dados de teste.

No entanto, um pequeno passo extra deinstrumentation é necessário sempre que criamos ou atualizamos o modelo. Discutiremos isso nas próximas seções.

3. Princípios de design

  • Infere metadados do DB

  • Configuração baseada em convenção

  • Sem sessões, sem "anexar, anexar novamente"

  • Modelos leves, POJOs simples

  • Sem proxy

  • Evitar o modelo de domínio anêmico

  • Não há necessidade de DAOs e DTOs

4. Configurando a biblioteca

Uma configuração típica do Maven para trabalhar com um banco de dados MySQL inclui:


    org.javalite
    activejdbc
    1.4.13


    mysql
    mysql-connector-java
    5.1.34

A versão mais recente dos artefatosactivejdbcemysql connector pode ser encontrada no repositório Maven Central.

Instrumentation é o preço da simplificação e necessário ao trabalhar com projetos ActiveJDBC.

Existe um plugin de instrumentação que precisa ser configurado no projeto:


    org.javalite
    activejdbc-instrumentation
    1.4.13
    
        
            process-classes
            
                instrument
            
        
    

O pluginactivejdbc-instrumentation mais recente também pode ser encontrado no Maven Central.

E agora, podemos processar a instrumentação executando um destes dois comandos:

mvn process-classes
mvn activejdbc-instrumentation:instrument

5. Usando o ActiveJDBC

5.1. O Modelo

Podemos criar um modelo simples com apenas uma linha de código - envolve a extensão da classeModel.

A biblioteca usainflections do idioma inglês para obter conversões de formas no plural e no singular de substantivos. Isso pode ser substituído usando a anotação@Table.

Vamos ver como um modelo simples se parece:

import org.javalite.activejdbc.Model;

public class Employee extends Model {}

5.2. Conectando a um banco de dados

Duas classes -BaseeDB – são fornecidas para se conectar aos bancos de dados.

A maneira mais simples de se conectar a um banco de dados é:

Base.open("com.mysql.jdbc.Driver", "jdbc:mysql://host/organization", "user", "xxxxx");

Quando os modelos estão em operação, eles utilizam uma conexão encontrada no encadeamento atual. Esta conexão é colocada no encadeamento local pela classeBase ouDB antes de qualquer operação de banco de dados.

A abordagem acima permite uma API mais concisa, removendo a necessidade de gerenciadores de sessão ou persistência de banco de dados, como em outros ORMs Java.

Vamos ver como usar a classeDB para se conectar a um banco de dados:

new DB("default").open(
  "com.mysql.jdbc.Driver",
  "jdbc:mysql://localhost/dbname",
  "root",
  "XXXXXX");

Se observarmos comoBaseeDB são usados ​​de maneira diferente para se conectar aos bancos de dados, isso nos ajuda a concluir queBase deve ser usado se estiver operando em um único banco de dados eDB ser usado com vários bancos de dados.

5.3. Inserir registro

Adicionar um registro ao banco de dados é muito simples. Conforme mencionado antes, não há necessidade de setters e getters:

Employee e = new Employee();
e.set("first_name", "Hugo");
e.set("last_name", "Choi");
e.saveIt();

Como alternativa, podemos adicionar o mesmo registro desta maneira:

Employee employee = new Employee("Hugo","Choi");
employee.saveIt();

Ou mesmo fluentemente:

new Employee()
 .set("first_name", "Hugo", "last_name", "Choi")
 .saveIt();

5.4. Atualizando registro

O trecho abaixo mostra como atualizar um registro:

Employee employee = Employee.findFirst("first_name = ?", "Hugo");
employee
  .set("last_name","Choi")
  .saveIt();

5.5. Excluindo registro

Employee e = Employee.findFirst("first_name = ?", "Hugo");
e.delete();

Se houver necessidade de excluir todos os registros:

Employee.deleteAll();

Se quisermos excluir um registro de uma tabela mestre que se desdobra em tabelas filho, usedeleteCascade:

Employee employee = Employee.findFirst("first_name = ?","Hugo");
employee.deleteCascade();

5.6. Buscando um registro

Vamos buscar um único registro do banco de dados:

Employee e = Employee.findFirst("first_name = ?", "Hugo");

Se quisermos buscar vários registros, podemos usar o métodowhere:

List employees = Employee.where("first_name = ?", "Hugo");

6. Suporte à Transação

Nos ORMs Java, há uma conexão explícita ou um objeto gerenciador (EntityManager no JPA, SessionManager no Hibernate etc.). Não existe tal coisa no ActiveJDBC.

A chamadaBase.open() abre uma conexão, anexa-a ao encadeamento atual e, portanto, todos os métodos subsequentes de todos os modelos reutilizam essa conexão. A chamadaBase.close() fecha a conexão e a remove do thread atual.

Para gerenciar transações, existem poucas chamadas de conveniência:

Iniciando uma transação:

Base.openTransaction();

Confirmando uma transação:

Base.commitTransaction();

Revertendo uma transação:

Base.rollbackTransaction();

7. Bancos de dados suportados

A versão mais recente suporta bancos de dados como SQLServer, MySQL, Oracle, PostgreSQL, H2, SQLite3, DB2.

8. Conclusão

Neste tutorial rápido, focamos e exploramos os princípios básicos do ActiveJDBC.

Como sempre, o código-fonte relacionado a este artigo pode ser encontradoover on Github.