私はプロジェクトでSpringBootを扱っています。 JdbcNamedTemplatesはデータにアクセスするためにDAOで使用されます。私は、私のdaosでクエリを書いて、正しいデータを得るために実行時にいくつかのパラメータをマップします。SpringアプリケーションでJDBCTemplateを使用して異なるテーブル名を扱う
ここで、要求に応じて複数の同一のテーブルからデータを取得する必要があります。他のテーブル名を使用する必要がある以外は、検索ロジックは同じです。 JdbcTemplateでは、テーブル名をパラメータとして使用できません。私はクエリを最終的にしたいので、文字列の書式設定を使用したくない。
ほとんどの機能とそれを拡張してテーブル名の違いを処理する具象クラス(基本的には "getTableName()"メソッド)を持つ抽象クラスを作成できました。これは機能します。しかし、私はたくさんのクラスを作っているようで、それらのクラスを少なくしたいと思っています。
もっと良い方法がありますか?
私は、特定のテーブルの名前にインターフェイスを使用するのがいいと思っていましたが、SpringとAutowiringでどのように動作するかを頭に入れてはいけません。
UPDATE:
はちょうど私が改善したいもののサンプルを与えます。 これまでのところ、私はこのような抽象DAOのカップルを持っています。彼らはデータベースの話をします。
public abstract class Dao1 {
private static final String PARAM = "p";
private final String QUERY1 = " SELECT * FROM " + getTableName() + " WHERE something";
//here we would also have autowired jdbcNamedTemplate and maybe some other stuff.
public getAll() {
//map parameters, do query return results
}
protected abstract String getTableName();
}
次に、私は抽象メソッドgetTableName()を実装するデータアクセスオブジェクトをいくつか持っています。テーブルが "秋"だったら、私は持っていなければならない。
だから、@Component
public class AutumnDao1 extends Dao1 {
@Override
protected String getTableName() {
return "AUTUMN";
}
}
あなたは、各抽象DAOのために、私はコンクリートDAOS(秋、冬、春、夏)のカップルをしなければならないだろうと見ることができ、上記の例から。これは現在受け入れられていますが、ある時点ではかなりの規模のダウのコレクションに成長するかもしれません。
「シーズン」/名前ごとに1つのクラス/インターフェイスを作成し、必要に応じて何らかの形でDao1、Dao2などにアタッチして回避する方法があるかどうかを知りたいと思います。私は、ユーザーの要求が到着したときに、どの名前が関連しているかを知るだけです。
"要求に応じて複数の同一テーブルからデータを取得する必要があります。異なるテーブル名を使用する必要がある以外は、検索ロジックは同じです" - サンプルを提供できますか? – kuhajeyan
インタフェースを使用して試したり、 bean @Qualifier。 – Nano
@Nano、私はアノテーションをつけたノブです。私の最後の更新を考慮してどのように動作するかを詳しく教えてください。 – Riv