1

私は最初のjava/DB/webアプリを書いています。私はjava/javascript / css / htmlを初めて使用するので、このプロジェクトは私にとって学習体験です。このアプリは、DBからの結果をWebページに表示し、ユーザーがWebページからDBに情報を編集/追加できるようにします。

私はSpringを使用しており、プログラムの一般的なフローは次のとおりです。Webページ->いくつかのJavaScript->リファレンスRESTサービス->リファレンスサービス-> DAO-> DTO-> DB

問題は、アプリが現在、クエリごとに異なるDAOとDTOを持っていることです。すべてのクエリを処理できる単一のDAOとDTOが存在するように、プログラムを簡略化したいと思います。

2〜10個の異なるスロットを処理できるDTOを作成しようとしています。各スロットに、関連付けられた番号ではなく名前を付けたいと思います。また、スロットの名前はDBからの返却で設定する必要があると思います。次に、DAOの行にデータをマッピングする信頼できる方法が必要です。私が何を扱っているかを示すために、いくつかの簡単なサンプルコードを投稿します。

@Repository
public class DecisionLevelDaoImpl implements DecisionLevelDao {

private JdbcTemplate jdbcTemplate;

@Autowired
public DecisionLevelDaoImpl(JdbcTemplate jdbcTemplate) {
    this.jdbcTemplate = jdbcTemplate;
}
private static String FIND_ACTIVE_DECISION_LEVEL = DaoHelper
        .loadResourceToString("queries/DecisionLevel_FindActive.sql");
@Override
public List<DecisionLevelDTO> findActiveDecisionLevel() {
    return jdbcTemplate.query(FIND_ACTIVE_DECISION_LEVEL, new DecisionLevelDTORowMapper());
}
private class DecisionLevelDTORowMapper implements RowMapper<DecisionLevelDTO> {
    @Override
    public DecisionLevelDTO mapRow(ResultSet rs, int rowNum) throws SQLException {
        String levelCd = rs.getString("LevelCd");
        String levelName = rs.getString("LevelName");
        String levelInstruct = rs.getString("LevelInstruct");
        String active = (rs.getBoolean("active") ? "Y" : "N");
        String printOrder = Integer.toString(rs.getInt("PrintOrder"));
        String lastUpdUser = rs.getString("LastUpdUser");
        return new DecisionLevelDTO (levelCd, levelName,
                   levelInstruct, active, printOrder,lastUpdUser);
    }
}

DTOは次のとおりです。

import org.codehaus.jackson.annotate.JsonProperty;

public class DecisionLevelDTO {

@JsonProperty("levelCd")
private String levelCd;
@JsonProperty("levelName")
private String levelName;
@JsonProperty("levelInstruct")
private String levelInstruct;
@JsonProperty("active")
private String active;
@JsonProperty("printOrder")
private String printOrder;
@JsonProperty("lastUpdUser")
private String lastUpdUser;

public DecisionLevelDTO () { }
public DecisionLevelDTO (String levelCd, String levelName,
        String levelInstruct, String active, String printOrder,
        String lastUpdUser) {
    super();
    this.levelCd = levelCd;
    this.levelName = levelName;
    this.levelInstruct = levelInstruct;
    this.active = active;
    this.printOrder = printOrder;
    this.lastUpdUser = lastUpdUser;
}

現在、約25のDaoと25のDTOがあります。これはひどく繰り返されるように思われるので、より保守しやすい方法を見つけたいと思います。

私は自分のコードを書く人を探していません。私はこれを学んでいるので、無料のコードはまったく役に立ちません。私が見るすべてのチュートリアルには、単一のクエリからの結果を返す単一のDAOと単一のDTOがあります。

これがこの種の質問に対して間違ったフォーラムである場合は申し訳ありません。

4

1 に答える 1

1

私は今あなたのポイントを得ました。できることは、DMLクエリとDQLクエリに別々のジェネリックメソッドを作成することです。これらのメソッドは、クエリと1つのResultSet(DQLの場合)またはPreparedStatement(DMLの場合)

を受け入れます。ここでも、必要に応じてDMLを更新/削除/挿入に分割できます。 これで、クエリを取得すると、クエリの機能がわかります。したがって、必要に応じてResultSetまたはPreparedStatementを設定し、それと一緒にクエリを渡して結果を取得します。 はっきりしない場合はお知らせください。


于 2013-03-22T06:08:06.647 に答える