jSqlBox5.0.4がリリースされ、細心の注意を払って作成され、保守可能なSQLを記述します

jSqlBoxはJavaDAOツールです。主な機能は、優れたアーキテクチャ、小さいサイズ、およびフル機能です。基本的に、データベース操作に関連するすべての機能はjSqlBoxによって提供されます。その主な機能は次のとおりです。  

1. 1M jarパッケージは1つだけで、サードパーティのライブラリに依存しません。単独で使用でき、Spring環境での使用もサポートします。  
2.カーネルはDbUtilsに基づいており、互換性があります。最悪の場合、ダウングレードしてDbUtilsとして使用でき、すぐに開始できます。 
3. javaでのスペルSQL、元のパラメーター埋め込みSQL書き込み方法を提唱します(以下で詳細に説明します)。  
4.サブデータベースとサブテーブル、マルチテナント、宣言型トランザクション、分散トランザクション、ロングテキスト、ActiveRecordをサポートします。
5. 80を超えるデータベースダイアレクト、ページング、関数変換、DDL生成、エンティティソースコード生成、エンティティまたはデータベース構造のExcelへのエクスポートをサポートします。
6.メインエンティティクラスの注釈は、JPA標準と互換性があります。 

SQLをJavaで直接記述し、元のパラメーターを埋め込んだSQLの記述がjSqlBoxの主な機能です。従来のSQL書き込みの問題点は何ですか?最大の問題は「保守不能」であるということです。たとえば、次のSQLは、列名とパラメーターの対応する位置を見つけるのに多くの費用がかかるため、列の追加、更新、または削除が困難です。時間の経過とともに、SQlが長くなるほど、維持するのが難しくなります。

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";

jSqlBoxを使用した後の記述は、次のようになります。

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());

jSqlBox内のSQLのパラメータは、任意の位置に移動できます。この記述方法により、SQLの読みやすさを低下させたり、ネイティブSQL関数を維持したりすることなく、SQLの保守性が大幅に向上します。列を追加または削除する場合対応する行を追加および削除するだけです。CRUDにエンティティORMを使用するJPAと比較して、MyBatisはテンプレートを使用してSQLを記述します。jSqlBoxは、SQLを直接記述し、SQLを直接スペルし、作業を終了する最も簡単で明確な方法であり、追加のエンティティクラスやテンプレートを導入する必要はありません。テンプレートの問題点は、テンプレートを2回書き込む必要があり、列名をテンプレートに1回書き込む必要があり、パラメーターを置き換えるときに再度書き込む必要があるため、保守の作業負荷が増加することです。

鋭い目の学生は、このタイプの列名文字列がSQLで直接書き込まれていることに気付く場合があります。データベースフィールドが変更されると、IDEはエラーを検出して報告できません。つまり、SQLは再構築をサポートしていません。この問題を解決するにはどうすればよいですか。心配ですが、このアップデートは解決策を提供します。

解決策1:jSqlBoxの最新のQ生成ツールを使用して、データベースの内容に従ってすべてのテーブルのQタイプを自動的に生成し、Qタイプの形式をカスタマイズします。データベースが変更されるたびに、Qカテゴリを再生成するだけです。クラスQには、すべてのテーブルフィールド定数が含まれています。上記のSQLは次のように記述できます。

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());

解決策2:QueryDSLのMavenプラグインを使用します。これは、JPAエンティティクラスがすでに存在する状況に適しています。このプラグインは、プロジェクトの既存のJPAエンティティクラスをスキャンしてQクラスを生成でき、jSqlBoxはそのQクラスを使用してネイティブSQLをスプライスできます。使用例は次のとおりです。これはスキーム1の使用法と似ています。テーブル名が必要な場合はQインスタンスが直接渡され、SQL列名が必要な場合はQクラスの定数フィールドを渡すことができます。

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

上記の2つのソリューションの詳細な紹介については、jSqlBoxユーザーマニュアルの「SQLでサポートされているリファクタリング」セクションを参照してください。

jSqlBox(バージョン5.0.4.jre8)この更新内容:
1。上記のように、新しく生成され、Qクラスを使用して、再構築をサポートするSQLを記述しました。データベースに従ってQクラスを生成するには、jSqlBoxで次のメソッドを呼び出すだけです。TableModelUtils.db2QClassSrcFiles   
      (ctx.getDataSource()、ctx.getDialect()、 "c:\\ outputFolder"、 "com.demo"、 "Q") ;
2.新しいテナント機能が追加されました。詳細については、ユーザーマニュアル「jSqlBoxadvanced-master-slave、sub-database sub-table、multi-tenant」の概要を参照してください。
3. TableModelUtilsOfDBは、compareDBメソッドを追加します。これは、2つのデータベース構造が異なるかどうかを比較するために使用できる小さな関数です。使用法は次のとおりです
   。TableModelUtilsOfDb.compareDbIgnoreLength(connection1、connection2);
4.DbContextの新しいSqlItemhandler構成オプションを使用できます。独自のSqlエントリパーサーをカスタマイズします。
5. DbProクラスの新しいqryBooleanValueメソッドは、ブール値を返します。
6. 2つの新しいメソッドnotBlankとnoBlankがDBクラスに追加されました。これらは、SQLを動的にスプライシングするときに空の文字列条件を決定するために使用されます。これは、元のnotNullおよびnoNullの使用方法と似ています。たとえば、
user.getAgeの場合は、次の書き込みメソッドを使用する必要があります。()がnullの場合、年齢列は挿入されません。ユーザーの場合。

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

DBのwhen()メソッドを使用して、条件に基づいてSQLを動的にスプライスすることもできますが、notBlank / noBlank / notNull / noNullメソッドの方が簡潔に記述できます。 

おすすめ

転載: www.oschina.net/news/126460/jsqlbox-5-0-4-released