|
|
Java форум JavaTalks форум программистов
|
|
|
|
|
|
|
| Предыдущая тема :: Следующая тема |
| Автор |
Сообщение |
Староверъ Ктапубеп

Зарегистрирован: 26.01.2008 Сообщения: 5392 Откуда: Русь
|
Добавлено: Ноя 29, 2009 14:40 Заголовок сообщения: DAO-уровень |
|
|
DAO - это уровень в проекте, который берет на себя осуществление работы с БД. Приэтом все приложение не будет знать с чем оно работает: с какой СУБД и с СУБД ли вообще, оно просто будет получать объекты из какого-то контейнера объектов. Базовый интерфейс для всех DAO-классов:
| Код: |
package ru.javatalks.dao;
import java.util.List;
public interface Dao<T> {
/**
* Base method for object saving (controls object inserting and updating).
*
* @param entity object to save
*/
public void saveObject(T entity);
/**
* Base method for deleting a specified object
*
* @param entity a object to delete
*/
public void deleteObject(T entity);
/**
* Base method for object deleting that bases on object class and id.
*
* @param id - an id (primary key) of the object
*/
public void deleteObject(Number id);
/**
* Base method for extracting object that bases on object class and id. If
* no object found returns null
*
* @param id the identifier (primary key) of the class
* @return filled object
*/
public T getObject(Number id);
/**
* Base method that used to extract all objects of concrete type. Like
* record search in a table
*
* @return list of filled objects
*/
public List<T> getAllObjects();
/**
* Get count of all objects of given type.
*
* @return count of objects
*/
public int getAllObjectsCount();
/**
* The HQL, SQL or other request in the form of the prepared statement.
*
* @param request the request to database
* @param values values to put instead of "?"
* @return list of objects that setisfy the criteria
*/
public List<T> getObjects(String request, Object[] values);
} |
Все DAO-классы должны будут реализовывать этот интерфейс. |
|
| Вернуться к началу |
|
 |
Староверъ Ктапубеп

Зарегистрирован: 26.01.2008 Сообщения: 5392 Откуда: Русь
|
Добавлено: Ноя 29, 2009 14:48 Заголовок сообщения: RE: DAO-уровень |
|
|
Реализация DAO для связки Spring+Hibernate:
| Код: |
package ru.javatalks.dao.hibernate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import ru.javatalks.dao.Dao;
import java.util.List;
/**
* Base class for hibernate DAO.
*
* @author nazica
* @author ctapobep
* @author unknown
*/
@SuppressWarnings("unchecked")
public class HibernateDao<T> extends HibernateDaoSupport implements Dao<T> {
private Class entityClass;
/**
* Creates a dao that works with specified entity class.
*
* @param entityClass class to collaborate with database
*/
public HibernateDao(Class entityClass) {
this.entityClass = entityClass;
}
public List<T> getAllObjects() {
return getHibernateTemplate().loadAll(getEntityClass());
}
public T getObject(Number id) {
return (T) getHibernateTemplate().get(getEntityClass(), id);
}
public int getAllObjectsCount() {
DetachedCriteria criteria = DetachedCriteria.forClass(getEntityClass()).setProjection(
Projections.rowCount());
return (Integer) getHibernateTemplate().findByCriteria(criteria).get(0);
}
public void saveObject(T object) {
getHibernateTemplate().saveOrUpdate(object);
}
public void deleteObject(Number id) {
getHibernateTemplate().delete(getObject(id));
}
public void deleteObject(T object) {
getHibernateTemplate().delete(object);
}
/**
* Finds objects by HQL.
*
* @param hql query to find objects by
* @param parameters parameters if query is prepared statement and contains "?"
* @return objects that are match specified criteria
*/
protected List<T> findByHQL(String hql, Object[] parameters) {
return getHibernateTemplate().find(hql, parameters);
}
public List<T> getObjects(String request, Object[] values) {
return findByHQL(request, values);
}
/**
* Gets the class of the entity the DAO works with.
*
* @return the class of the entity the DAO works with
*/
public Class<T> getEntityClass() {
return entityClass;
}
} |
Как правило конкретный DAO имеет целый набор дополнительных методов, их все описывают в каком-либо интерфейсе, например, UserDao, и тогда конкретный UserDaoImpl будет реализовывать этот интерфейс и наследоваться от HibernateDao. Для того, чтоб создать какой-то конкретный DAO, нужно просто создать объект класса UserDaoImpl, передать ему SessionFactory. Описание в Spring-конфиге в таком случае будет приблизительно следующим:
| Код: |
<bean id="hibernateDao" class="ru.javatalks.dao.hibernate.HibernateDao" abstract="true">
<property name="sessionFactory" ref="hibernateSessionFactory"/>
</bean>
<bean id="userDao" class="ru.javatalks.dao.hibernate.impl.UserDaoImpl" parent="hibernateDao">
<constructor-arg value="ru.javatalks.dao.sample.User"/>
</bean> |
userDao - это уже конкретный DAO для конкретного entity - User. |
|
| Вернуться к началу |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|