1

spring と hibernate を使用して、ユーザーが GUI を介して DB に情報を保存および取得できるようにする Web アプリケーションを作成しています。

DAO とサービス層の作成に関しては行き詰まりました。新しい配信を追加できるメソッドを作成したい。私の配信テーブルには、製品名、製品タイプ顧客名、顧客国をそれぞれ含む独自のテーブルにマッピングされた製品 ID顧客 IDがあります。

私が苦労している部分は、エンドユーザーに製品タイプ、製品名、顧客名、顧客の国、日付を入力して配達を記録してもらいたいということです。私は、

(1) これらのオブジェクトを含む新しい配信を追加するメソッドで DAO を作成します。

また

(2)一般的なオブジェクトをDBに永続化するだけのDAOを作成し、サービスメソッドを使用して個別のオブジェクトごとにDAOを実装しますか?

ご協力ありがとうございました!

/D

4

1 に答える 1

0

これが私の一般的なdaoのスニペットであり、各サービスレイヤークラスに挿入します。

@Component("Dao")
public class Dao implements IDao  {
    @Resource(name = "sessionFactory")
    private SessionFactory sessionFactory;

    @Override
    public <T> T save(final T o){
        return (T) sessionFactory.getCurrentSession().save(o);
    }

    @Override
    public void delete(final Object object) {
        sessionFactory.getCurrentSession().delete(object);
    }

    @Override
    public <T> T get(final Class<T> type, final Long id) {
        return (T) sessionFactory.getCurrentSession().get(type, id);
    }

    @Override
    public <T> List<T> getFieldsEq(final Class<T> type, final Map<String, Object> restrictions) {
        final Session session = sessionFactory.getCurrentSession();
        final Criteria crit = session.createCriteria(type);
        for (Map.Entry<String, Object> entry : restrictions.entrySet()) {
            crit.add(Restrictions.eq(entry.getKey(), entry.getValue()));
        }

        return crit.list();
    }
}

次のように、サービスレイヤーで使用できるのはどれですか。

@Transactional(readOnly = true)
public List<City> getCities() {
  return dao.getAll(City.class);
}

そしてもちろん、特定の複雑なクエリに対してdaoを拡張することもできます。1つの一般的なdaoを持つことは、単一責任の原則であるDRYに従い、テストを容易にします。トランザクションはサービスレイヤー上にあり、作業単位に直接関連している必要があります。

于 2012-04-16T11:41:57.400 に答える