jSqlBox5.0.4 publié, méticuleusement conçu et écrit SQL maintenable

jSqlBox est un outil Java DAO. Ses principales caractéristiques sont une excellente architecture, une petite taille et des fonctionnalités complètes. Fondamentalement, toutes les fonctions liées aux opérations de base de données sont fournies par jSqlBox. Ses principales caractéristiques sont:  

1. Il n'existe qu'un seul package jar 1M et ne repose sur aucune bibliothèque tierce. Il peut être utilisé indépendamment et prend également en charge l'utilisation dans l'environnement Spring.  
2. Le noyau est basé sur DbUtils et est compatible avec lui.Dans le pire des cas, il peut être rétrogradé et utilisé comme DbUtils, ce qui est rapide à démarrer. 
3. Prôner l'orthographe SQL en java, méthode d'écriture SQL embarquée des paramètres d'origine (qui sera décrite en détail ci-dessous).  
4. Prise en charge de la sous-base de données et de la sous-table, multi-locataire, transaction déclarative, transaction distribuée, texte long, ActiveRecord.
5. Prend en charge plus de 80 dialectes de base de données, pagination, transformation de fonction, génération DDL, génération de code source d'entité, exportation de structure d'entité ou de base de données vers Excel.
6. Les principales annotations de classe d'entité sont compatibles avec les normes JPA. 

Ecrivez du SQL directement en Java, et l'écriture Embedded SQL des paramètres d'origine est la principale fonctionnalité de jSqlBox. Quel est le problème avec l'écriture SQL traditionnelle? Le plus gros problème est qu'elle est "non maintenable". Par exemple, le SQL suivant est difficile à ajouter, mettre à jour ou supprimer des colonnes car il faut beaucoup d'argent pour trouver les positions correspondantes des noms de colonnes et des paramètres. Au fil du temps, plus SQl est long, plus il est difficile de maintenir:

insert into tb_price_setting (id,code,adult_price,child_price,total_price,adult_note,child_note,
currency,type,time_zone,status,include_tax,adult_discount,child_discount,total_discount,
created_at,updated_at,) values(1200, "BJD837434", 50, 30, 80, "15以上全价", "8-15半价", "USD, 8,
"UTC", "A", 3.03, 0, 0, 0, "2019-09-17 04:07:55", "2020-03-10 22:43:00";

Après avoir utilisé jSqlBox, l'écriture est comme ceci:

DB.exe("insert into tb_price_setting (", //
	"id,", par(1200), //
	"code,", par("BJD837434"), //
	"adult_price,", par(50), //
	"child_price,", par(30), //
	"total_price,", par(80), //
	"adult_note,", par("15以上全价"), //
	"child_note,", par("8-15半价"), //
	"currency,", par("USD"), //
	"type,", par(8), //
	"time_zone,", par("UTC"), //
	"status,", par("A"), //
	"include_tax,", par(3.03), //
	"adult_discount,", par(0), //
	"child_discount,", par(0), //
	"total_discount,", par(0), //
	"created_at,", par("2019-09-17 04:07:55"), //
	"updated_at,", par("2020-03-10 22:43:00"), //
	")", valuesQuestions());

Les paramètres de SQL dans jSqlBox peuvent être déplacés vers n'importe quelle position. Cette méthode d'écriture améliore considérablement la maintenabilité de SQL sans réduire la lisibilité de SQL et conserver les fonctions SQL natives. Lors de l'ajout ou de la suppression de colonnes Ajoutez et supprimez simplement les lignes correspondantes. Comparé à JPA utilisant l'entité ORM pour CRUD, MyBatis utilise des modèles pour écrire SQL, jSqlBox est le moyen le plus simple et le plus clair d'écrire, d'orthographier directement SQL et de terminer le travail, pas besoin d'introduire des classes d'entités et des modèles supplémentaires. Le problème avec le modèle est qu'il doit être écrit deux fois, le nom de la colonne est écrit une fois dans le modèle et il doit être réécrit lorsque les paramètres sont remplacés, ce qui augmente la charge de travail de maintenance.

Les étudiants aux yeux vifs peuvent constater que ce type de chaîne de nom de colonne est écrit directement en SQL. Si le champ de la base de données change, l'EDI ne peut pas détecter et signaler les erreurs. En d'autres termes, SQL ne prend pas en charge la reconstruction. Comment résoudre ce problème? Inquiétude, cette mise à jour fournit une solution.

Solution 1: Utilisez le dernier outil de génération Q de jSqlBox pour générer automatiquement des types Q de toutes les tables en fonction du contenu de la base de données et personnaliser le format de type Q. Chaque fois que la base de données change, régénérez la catégorie Q. La classe Q contient toutes les constantes de champ de table. Le SQL ci-dessus peut être écrit comme suit:

QTbPriceSetting p=QTbPriceSetting.instance;
DB.exe("insert into ",p," (", //
	p.id, par(1200), //
	p.code, par("BJD837434"), //
	p.adult_price, par(50), //
	p.child_price, par(30), //
	p.total_price, par(80), //
	p.adult_note, par("15以上全价"), //
	p.child_note, par("8-15半价"), //
	p.currency, par("USD"), //
	p.type, par(8), //
	p.time_zone, par("UTC"), //
	p.status, par("A"), //
	p.include_tax, par(3.03), //
	p.adult_discount, par(0), //
	p.child_discount, par(0), //
	p.total_discount, par(0), //
	p.created_at, par("2019-09-17 04:07:55"), //
	p.updated_at, par("2020-03-10 22:43:00"), //
	")", valuesQuestions());

Solution 2: utilisez le plug-in Maven de QueryDSL, qui convient aux situations où des classes d'entité JPA existent déjà. Ce plug-in peut analyser les classes d'entités JPA existantes du projet pour générer des classes Q, et jSqlBox peut utiliser ses classes Q pour épisser du SQL natif. L'exemple d'utilisation est le suivant, qui est similaire à l'utilisation du schéma 1. Lorsque le nom de la table est nécessaire, l'instance Q est directement transmise, et lorsque le nom de la colonne SQL est nécessaire, le champ constant de la classe Q peut être passé:

QUser u = QUser.user;
DB.exe("insert into ", u, " (",  u.id, ",", par(1),  u.userName, ",", par("张三"),  u.userAge, par(15),  ")", valuesQuestions());

Veuillez vous référer à la section "SQL Supported Refactoring" du manuel de l'utilisateur de jSqlBox pour une introduction détaillée des deux solutions ci-dessus.

jSqlBox (version 5.0.4.jre8) Ce contenu de mise à jour:
1. Comme mentionné ci-dessus, classe Q nouvellement générée et utilisée pour écrire du SQL qui prend en charge la reconstruction. Pour générer la classe Q selon la base de données, il vous suffit d'appeler la méthode suivante dans jSqlBox:   
      TableModelUtils.db2QClassSrcFiles (ctx.getDataSource (), ctx.getDialect (), "c: \\ outputFolder", "com.demo", "Q") ;
. 2. sont ajoutées de nouvelles fonctions locataires pour plus de détails, s'il vous plaît se référer à l'introduction dans le manuel utilisateur « jSqlBox avancé maître-esclave, sous-table, multi-locataire sous-base de données ».
3. TableModelUtilsOfDB ajoute la méthode compareDB, qui est une petite fonction qui peut être utilisée pour comparer si les deux structures de base de données sont différentes. L'utilisation est la suivante:
   TableModelUtilsOfDb.compareDbIgnoreLength (connection1, connection2);
4. Une nouvelle option de configuration SqlItemhandler pour DbContext peut être utilisée Personnalisez votre propre analyseur d'entrées SQL.
5. La nouvelle méthode qryBooleanValue de la classe DbPro renvoie une valeur booléenne.
6. Deux nouvelles méthodes, notBlank et noBlank, sont ajoutées à la classe DB, qui sont utilisées pour déterminer la condition de chaîne vide lors de l'épissage dynamique de SQL, ce qui est similaire aux méthodes d'utilisation notNull et noNull d'origine. Par exemple, la méthode d'écriture suivante doit être
utilisée user.getAge Lorsque () est nul, la colonne d'âge ne sera pas insérée. Lorsque l'utilisateur.

DB.exe("insert into users (", //
           " name ,", par("Sam"), //
            notNull("age,", user.getAge()), //
            notBlank("email,", user.getEmail()), //
            " address ", par("Canada"), //
            ") ", valuesQuestions()); 

La méthode when () dans DB peut également être utilisée pour épisser dynamiquement SQL en fonction de conditions, mais la méthode notBlank / noBlank / notNull / noNull est plus concise à écrire. 

Je suppose que tu aimes

Origine www.oschina.net/news/126460/jsqlbox-5-0-4-released
conseillé
Classement