powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / DAO reuse code
5 сообщений из 5, страница 1 из 1
DAO reuse code
    #38098878
ccoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Допустим есть какието общие операции для entities
Делаю для них
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
@Component
public class Dao<T> {

    @Resource(name = "sessionFactory")
    private SessionFactory sessionFactory;

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


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

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

    /***/
    public <T> T merge(final T o) {
        return (T) sessionFactory.getCurrentSession().merge(o);
    }

    /***/
    public <T> void saveOrUpdate(final T o) {
        sessionFactory.getCurrentSession().saveOrUpdate(o);
    }

    public <T> List<T> getAll(final Class<T> type) {
        final Session session = sessionFactory.getCurrentSession();
        final Criteria crit = session.createCriteria(type);
        //List<E>
        return crit.list();
    }
}


и дальше наследую
Код: java
1.
2.
3.
public class AccountDao extends Dao<AccountEntity> {
 и тут дописываю методы только для AccountEntity
}


но тогда чтобы допустим сделать saveOrUpdate от AccountDao всёравно нужно указать тип <AccountEntity>

а хочу чтобы без <AccountEntity> и без каста ножно было подать AccountDao объект
...
Рейтинг: 0 / 0
DAO reuse code
    #38098887
pasha701
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
@Component
public class Dao<T> {
  private final Class<T> type;

  public Dao(final Class<T> type){
     this.type=type;
   }

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


Код: java
1.
2.
3.
4.
5.
public class AccountDao extends Dao<AccountEntity> {
  public AccountDao(){
    super(AccountEntity.class);
  }
}
...
Рейтинг: 0 / 0
DAO reuse code
    #38098892
ccoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется не получится так как ещё надо
Код: java
1.
2.
3.
    public <T> T merge(final T o) {
        return (T) sessionFactory.getCurrentSession().merge(o);
    }


и если вызвать то кастить нужно
...
Рейтинг: 0 / 0
DAO reuse code
    #38099149
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ccoder,

http://www.ibm.com/developerworks/ru/library/j-genericdao/
но мне лично не нравится подход.
Не намного он облегчает код imho
...
Рейтинг: 0 / 0
DAO reuse code
    #38099338
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
имхо код sessionFactory.getCurrentSession().save(o) не делает ничего такого особенного, из-за чего стоило бы городить абстрактный класс с реализацией.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / DAO reuse code
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]