Introduction à ActiveJDBC

Introduction à ActiveJDBC

1. introduction

ActiveJDBC est un ORM léger suivant les idées de base deActiveRecord, l'ORM principal de Ruby on Rails.

Il se concentre sursimplifying the interaction with databases by removing the extra layer of typical persistence managers et se concentre sur l'utilisation de SQL plutôt que sur la création d'un nouveau langage de requête.

De plus, il fournit sa propre façon d'écrire des tests unitaires pour l'interaction avec la base de données via la classeDBSpec.

Voyons en quoi cette bibliothèque diffère des autres ORM Java populaires et comment l'utiliser.

2. ActiveJDBC vs autres ORM

ActiveJDBC présente des différences nettes par rapport à la plupart des autres ORM 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, pas besoin d'apprendre un nouveau langage de requête, pas de getters / setters. La bibliothèque elle-même est légère en termes de taille et de nombre de dépendances.

Cette implémentation encourage l'utilisation de bases de données de test qui sont nettoyées par le framework après l'exécution des tests, réduisant ainsi le coût de maintenance des bases de données de test.

Cependant, une petite étape supplémentaire deinstrumentation est nécessaire chaque fois que nous créons ou mettons à jour un modèle. Nous en discuterons dans les sections à venir.

3. Principes de conception

  • Déduit les métadonnées de la base de données

  • Configuration basée sur la convention

  • Pas de sessions, pas de "rattacher, rattacher"

  • Modèles légers, POJO simples

  • Pas de proxy

  • Évitement du modèle de domaine anémique

  • Pas besoin de DAO et DTO

4. Mise en place de la bibliothèque

Une configuration typique de Maven pour travailler avec une base de données MySQL comprend:


    org.javalite
    activejdbc
    1.4.13


    mysql
    mysql-connector-java
    5.1.34

La dernière version des artefactsactivejdbc etmysql connector peut être trouvée sur le référentiel central Maven.

Instrumentation est le prix de la simplification et est nécessaire lorsque vous travaillez avec des projets ActiveJDBC.

Il existe un plugin d'instrumentation qui doit être configuré dans le projet:


    org.javalite
    activejdbc-instrumentation
    1.4.13
    
        
            process-classes
            
                instrument
            
        
    

Le dernier pluginactivejdbc-instrumentation peut également être trouvé dans Maven Central.

Et maintenant, nous pouvons traiter l’instrumentation en effectuant l’une de ces deux commandes:

mvn process-classes
mvn activejdbc-instrumentation:instrument

5. Utiliser ActiveJDBC

5.1. Le modèle

Nous pouvons créer un modèle simple avec une seule ligne de code - cela implique d'étendre la classeModel.

La bibliothèque utiliseinflections de la langue anglaise pour réaliser des conversions de formes plurielles et singulières de noms. Cela peut être remplacé à l'aide de l'annotation@Table.

Voyons à quoi ressemble un modèle simple:

import org.javalite.activejdbc.Model;

public class Employee extends Model {}

5.2. Connexion à une base de données

Deux classes -Base etDB – sont fournies pour se connecter aux bases de données.

Le moyen le plus simple de se connecter à une base de données est:

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

Lorsque les modèles sont en fonctionnement, ils utilisent une connexion trouvée dans le thread actuel. Cette connexion est placée sur le thread local par la classeBase ouDB avant toute opération DB.

L'approche ci-dessus permet une API plus concise, éliminant le besoin de gestionnaires de session de base de données ou de persistance, comme dans d'autres ORM Java.

Voyons comment utiliser la classeDB pour se connecter à une base de données:

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

Si nous regardons comment lesBase etDB sont utilisés différemment pour se connecter aux bases de données, cela nous aide à conclure queBase devrait être utilisé si vous travaillez sur une seule base de données et queDB devrait être utilisé avec plusieurs bases de données.

5.3. Insérer un enregistrement

Ajouter un enregistrement à la base de données est très simple. Comme mentionné précédemment, il n'y a pas besoin de setters et de getters:

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

Alternativement, nous pouvons ajouter le même enregistrement de cette façon:

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

Ou même, couramment:

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

5.4. Mise à jour de l'enregistrement

L'extrait ci-dessous montre comment mettre à jour un enregistrement:

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

5.5. Suppression d'un enregistrement

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

S'il est nécessaire de supprimer tous les enregistrements:

Employee.deleteAll();

Si nous voulons supprimer un enregistrement d'une table maître qui tombe en cascade vers les tables enfants, utilisezdeleteCascade:

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

5.6. Aller chercher un disque

Extrayons un seul enregistrement de la base de données:

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

Si nous voulons récupérer plusieurs enregistrements, nous pouvons utiliser la méthodewhere:

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

6. Support de transaction

Dans les ORM Java, il existe une connexion explicite ou un objet de gestionnaire (EntityManager dans JPA, SessionManager dans Hibernate, etc.). Il n'y a rien de tel dans ActiveJDBC.

L'appelBase.open() ouvre une connexion, l'attache au thread courant et donc toutes les méthodes suivantes de tous les modèles réutilisent cette connexion. L'appelBase.close() ferme la connexion et la supprime du thread actuel.

Pour gérer les transactions, il existe peu d'appels de commodité:

Commencer une transaction:

Base.openTransaction();

Commettre une transaction:

Base.commitTransaction();

Annulation d'une transaction:

Base.rollbackTransaction();

7. Bases de données supportées

La dernière version prend en charge des bases de données telles que SQLServer, MySQL, Oracle, PostgreSQL, H2, SQLite3, DB2.

8. Conclusion

Dans ce rapide tutoriel, nous nous sommes concentrés sur les bases de ActiveJDBC.

Comme toujours, le code source lié à cet article peut être trouvéover on Github.