Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / DAO reuse code / 5 сообщений из 5, страница 1 из 1
02.01.2013, 20:05:29
    #38098878
ccoder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DAO reuse code
Допустим есть какието общие операции для 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
02.01.2013, 20:22:44
    #38098887
pasha701
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DAO reuse code
Код: 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
02.01.2013, 20:40:16
    #38098892
ccoder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DAO reuse code
Мне кажется не получится так как ещё надо
Код: java
1.
2.
3.
    public <T> T merge(final T o) {
        return (T) sessionFactory.getCurrentSession().merge(o);
    }


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

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


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