これは確かにうまくいくかもしれません。ただし、質問の将来の読者のために、もう少し完全になります。
しかし、作成するクエリの多くは、データベース固有のものであったり、効果を発揮するために特定のキーワードに依存している場合があります。たとえば、一般的なクエリを考えてみましょう。データベース内のすべての製品を一覧表示する必要がありますが、一度に 10 個のユーザーを表示します。
MySQL:
select * from products LIMIT 0,10
次に、次の 10 行について:
select * from products LIMIT 10,10
等
素晴らしいので、ユーザーはデータベースに MySQL を使用できます。別の無料で非常に人気のあるデータベースである postgres を使用している場合はどうでしょうか。そのクエリは機能しません。
SELECT * FROM product LIMIT 10 OFFSET 10
したがって、あなたのコードはあなたが思っているほど移植性がありません。
これを回避する 1 つの方法は、実行する予定のすべてのクエリ/アクセス用に独自のインターフェイス (インターフェイス Query、インターフェイス Access) を作成し、DB 方言 (MySQL、postgres) に基づいてインスタンス化できるクエリ ファクトリを用意することです。など)、MySQLQueryImpl と PostGresQueryImpl を作成します (どちらも Query インターフェースを実装しています)。
残念ながら、データベース呼び出しの一部を 2 回コーディングするか、それらをプロパティ ファイル自体に移動する必要があります。プロパティ ファイルからインスタンス化するようにクエリ要素を設計することもできます (最初に希望したように)。将来、他のユーザーが独自のクエリを実装できるようにすることで、拡張性があり、自分ですべてを行う必要はありません。
または...
もう 1 つの選択肢は、おそらくより洗練されていてエラーが起きにくい (まあ... たぶん) 他の人に任せることです。Hibernateは、データベースの読み取り/書き込みを抽象化する非常に一般的なツールであり、必要に応じて別のデータベースを使用するように構成できますが、長年の経験とバグ修正があるだけです。(複雑なクエリや結合など) 習得するのが最も簡単なことではありませんが、基本的なモデルとデータベースへのマッピングについては、キャッシュを非常に簡単にオン/オフする機能を含め、必要なものすべてとそれ以上のものを提供します。このようなシステムを作成して強化するには、長い時間がかかります。