Overblog
Editer l'article Suivre ce blog Administration + Créer mon blog
12 juin 2013 3 12 /06 /juin /2013 16:33

 

Le monde de la programmation est un monde sans cesse évolutif, et des techniques naissent de plus en plus dans l’optique de faciliter le développement des logiciels. C’est ainsi qu’en 2006, Clinton Begin portait à l’attention du public  IBATIS 2.0, Framework  très robuste et fiable conçu pour permettre au développeur de ne pas trop se dépenser en matière de gestion des accès aux données en réduisant efficacement la quantité de code traditionnellement nécessaire pour atteindre le même but. Plusieurs autres Framework ont été produits dans la même lancée, c’est le cas du très célèbre Hibernate.  Et pourtant, malgré la simplification apportée par ceux-ci, l’on est généralement obligé de produire un nombre important de fichiers devant faciliter les traitements métiers. Par exemple, dans mon cas, je devais produire pour chaque table un fichier sqlMap, un java bean qui devait être mappé à la table, une interface pour la manipulation de la table, et la classe implémentant cette interface, ce que je trouvais un peu fastidieux. C’est notamment de cet ennui qu’est venue l’idée de produire une API devant se positionner au-dessus d’IBATIS pour masquer toutes les interfaces généralement nécessaires et leurs implémentations respectives.  Notons que c’est la simplicité d’IBATIS qui a motivé notre choix, aussi ai-je remarqué que le conteneur d’ejb dans divers serveurs d’application constituait déjà un tel outil pour ce qui est d’HIBERNATE.

Avec la mise sur pied de YAKOLIV proxy based DAO adapter, je produis pour chaque table un fichier sqlMap (nécessaire pour faire fonctionner IBATIS), un java bean pour le mapping, et je peux me focaliser sur les traitements métiers.

Ayant beaucoup profité de cette simplicité d’IBATIS, je supporte mal le fait de devoir désormais l’appeler MyBatis, et j’ai décidé de lui apporter mon soutien pour qu’il soit de plus en plus utile et utilisé …

 

YAKOLIV DAO Adapter

Il s'agit ici de la partie du framework qui s'occupe des accès aux données. Grâce à lui, vous n'aurez plus besoin d'écrire des DAO dans vos programmes. Les articles suivants vous donneront plus de précisions.

 

YAKOLIV s’inscrit dans la continuité de l’action d’IBATIS DATA MAPPER qui est d’établir facilement la correspondance entre les java bean et  les requêtes permettant l’accès aux données en réduisant de plus de 80% le code à produire pour atteindre le même but.

 

 

L'utilisation de Yakoliv Framework est très simple.  Pour obtenir les fichier (*.jar) dont je fais référence dans cet article, un mail à l'adresse desbocages-yakoliv@yahoo.fr suffit.

1- Ajouter yakoliv-annotations.jar à votre classpath

2-Ecrire vos java beans en utilisant les annotations de Yakoliv

3- Configurer vos SqlMaps pour mapper vos java beans à vos tables

4- Ajouter yakoliv-proxy-based-ibatis-dao-adapter-1_0.jar à votre classpath

5- Ajouter à votre classpath les drivers de posgresql et d'ibatis

6- Ajouter spring framework

 

L’annotation @Entity

Toutes les classes mappées aux tables devraient porter cette annotation.

L’annotation @Adapter

Au niveau de la couche où vous voudrez accéder aux données, vous aurez besoin d’une seule instance de la classe DaoAdapter. Au moment de la déclarer, dotez la de cette annotation et ne vous occupez pas de son initialisation. Lors de l’enregistrement dans le conteneur, yakoliv s’en chargera( Container.register(this));

 L’annotation @Proxy

Au moment d’utiliser vos classes métiers, déclarez leurs instances en les dotant de cette annotation si vous voulez bien profiter d’une autre fonctionnalité importante de yakoliv qui est la programmation orientée aspect. Vous pouvez déclarer vos objets autrement, par exemple dans un fichier spring et les injecter par dépendance (IOC), ça ne changera rien à l’utilisation de yakoliv. Pour ce qui est de l’AOP avec yakoliv, j'en reparlerai plus tard dans mes prochains articles.

L’annotation @Transient

Si dans votre classe il y a des champs qui n’interviennent pas dans le mapping, marquez-les de cette annotation. Il s’agit en fait des champs dont les valeurs ne sont pas insérées dans la base de données.

L’annotation @Bean

Cette annotation permet de spécifier les champs qui doivent être initialisés à partir d’un fichier de configuration de spring.

Exemple :@Bean(name="un_nom" file="mon/chemin/fich.xml")

L’annotation @PrimaryKey

Permet de spécifier les champs constituant la clé primaire de la table mappée à l’objet. Ceci permet aussi de reconnaître facilement quels champs pourraient être utilisés lors de la sélection d’un élément unique find(Class,object);

L'annotation @Auto

Permet de dire qu'un champ est généré automatiquement au niveau de la base de donnée et n'a donc pas besoin de figurer dans la liste des objets à insérer par la requête d'insertion.

L'annotation @Cascade

Elle permet de spécifier des attributs de clés étrangères.  Elle a deux champs: update(par defaut "true") et delete(par defaut "true").

Si delete="true" alors la suppression de l'élément dans la table d'origine supprime aussi tous les éléments associés dans la table hôte.

Si update="true" la mise à jour de l'attribut lié à celui qui porte l'annotation est propagée dans toutes les tables hôtes. 

Cette annotation permet de configurer la génération du code SQL qui permettra de créer vos tables dans votre base de données.

L'annotation @Column

Elle permet de préciser un nom de colonne si l'on voudrait que ce soit différent du nom du champs associé. Par defaut, yakoliv convertira le nom du champ en majuscule.

L'annotation @CompareEqual

Elle permet de dire qu'au moment de faire la recherche dynamique, on doit utiliser [=] et non [LIKE]. les champs qui la porteront seront généralement de type String

L'annotation @ForeignKey

Elle signifie qu'une contrainte de clé étrangère doit être appliquée sur le dit champs.

Elle a deux champs: name (facultatif), et type (obligatoire)

name renseigne le nom du champs correspondant dans la classe de type "type". type est le nom de la classe étrangère (nom complet avec arborescence des paquetages)

ex:

@Entity

class MonType{

@Cascade

@ForeignKey(name="field" type="org.app.Type2")

private String champs;

}

L'annotation @NotNull

Permet de spécifier un champs comme étant non nul

L'annotation @Table

Elle permet de préciser un nom de tablesi l'on voudrait que ce soit différent du nom de la classe associée. Par defaut, yakoliv utilisera le nom du champ.

L'annotation @Unique

Permet de spécifier une contrainte d'unicité sur une colonne associée à un champs.

L'annotation @LinkedUniqueKey

Permet de spécifier une contrainte d'unicité sur un ensemble de colonnes associée à un champs.

 L’annotation @QueryMethod

Cette annotation intervient lorsque le besoin naît de charger les données à partir des requêtes touchant plusieurs tables. La méthode vous permettant de les charger doit obligatoirement porter l’annotation.  Aussi, la seule instruction de cette méthode devra être return null ; et avoir pour paramètre un java.util.Map car elle sera interceptée par l’Observer. L’annotation doit préciser l’identifiant de la balise statement correspondant dans le fichier sqlMap. Exemple : @QueryMethod(mappedQueryId= ‘’un_id ‘’)

L’annotation @Spring

Elle permet de définir le chemin vers le fichier de configuration de Spring. Il s’agit ici du fichier définissant vos propres beans qui seront initialisés par yakoliv. 

 

En somme, Yakoliv est constitué de 21 annotations permettant de faciliter les accès aux données. Mais nous ne les utiliserons pas toutes, car d'autres sont utilisées de façon native par le Framework.

Le prochain article concernera un exemple d'application de l'utilisation de cet outil.

 

 

 

 

Partager cet article
Repost0

commentaires

Présentation

  • : Le blog de YAKAM OLIVIER
  • : Blog de partage d'idées en mathématiques et en programmation avancée JAVA
  • Contact

Recherche

Archives

Mes Sources Favorites