Persist est un outil ORM / DAO basé sur Java . Il fournit uniquement le minimum de fonctionnalités nécessaires pour mapper des objets ou des maps à partir de requêtes de base de données et de paramètres d'instruction.
Persist fonctionne autour d'un objet java.sql.Connection. Cela signifie qu'il ne se soucie pas des langages de requête client (il utilise du SQL simple avec des espaces réservés, comme l'utilisent les objets PreparedStatement), de la gestion des pools de connexions, de la gestion des transactions (pour la plupart), etc. Cela signifie également qu'il est très flexible et peut être intégré à n'importe quel code qui dépend de JDBC (y compris le code qui utilise déjà un autre outil ORM / DAO ).
Persist ne nécessite pas de mappages explicites entre les POJO et les tables de base de données. Tant qu'il existe une sorte de convention de dénomination reliant les noms de base de données aux noms de POJO , Persist ne nécessitera pratiquement aucun mappage. Il peut cependant être chargé de mapper des classes et des champs Java aux tables et colonnes de base de données à l'aide d'annotations.
Persist prend en charge plusieurs stratégies de mappage différentes :
POJO mappés aux tables
Par défaut, si aucune annotation ne spécifie qu'une classe donnée ne doit pas être mappée à une table, Persist essaiera de trouver une table correspondant à cette classe et créera un mappage entre les champs et les colonnes.
// Insère un nouveau client (la classe Customer est automatiquement mappée à la table customer) persist . insert ( customer ); // Lit un client par sa clé primaire Customer c = persist . readByPrimaryKey ( Customer . class , 42 ); // Récupère les clients à l'aide d'une requête personnalisée (notez l'utilisation de varargs) Liste list = persist . readList ( Customer . class , "select * from customer where id > ?" , 10 ); // Récupère tous les clients et attribue le ResultSet à un itérateur Iterator allCustomersIterator = persist . readIterator ( Customer . class , "select * from customer" );
POJO non mappés aux tables
Si une classe est annotée avec @NoTable, Persist n'essaiera pas de la mapper à une table et la classe ne pourra contenir que les données produites par les requêtes.
@NoTable classe QueryData { privé int count ; privé String concatName ; public long getCount ( ) { retourner count ; } public void setCount ( long count ) { this.count = count ; } public String getConcatName ( ) { retourner concatName ; } public void setConcatName ( String concatName ) { this.concatName = concatName ; } } QueryData qd1 = persist . read ( QueryData . class , "sélectionnez 1 comme nombre, 'bonjour' comme concat_name à partir du double" );
java.util.Map's
Les cartes peuvent être utilisées pour conserver les données des requêtes. Persist convertira les valeurs renvoyées par la requête en types Java. Les clés de la table sont les noms des colonnes renvoyées en minuscules.
// Récupérer un client à l'aide d'une requête personnalisée et renvoyer le résultat sous forme de carte Map < String , Object > customerMap = persist . readMap ( " select * from customer where id=?" , 10 ); // Récupère tous les clients et génère les résultats sous forme d'instances de carte dans une liste List < Map < String , Object >> customerMapList = persist . readMapList ( "select * from customer" ); // Récupère tous les clients et affecte le ResultSet à un Iterator qui mappe les lignes aux instances Map Iterator allCustomersIterator = persist . readMapIterator ( "select * from customer" );
Types primitifs Java
Si une requête renvoie une seule colonne, Persist peut mapper les données directement dans des types primitifs (valeurs uniques ou listes) :
// Renvoyer le nom du client sous forme de chaîne String name = persist . read ( String . class , "select name from customer where id=?" , 55 ); // Récupère tous les identifiants client sous forme de liste d'entiers List < Integer > ids = persist . readList ( Integer . class , "select id from customer" );
Requêtes personnalisées sans données renvoyées
Les requêtes arbitraires qui ne renvoient aucune donnée peuvent être facilement exécutées.
// Exécuter SQL arbitraire avec des paramètres persist . executeUpdate ( "supprimer du client où id dans (?,?)" , 10 , 20 );