import java.util.List;
/**
* @file_name BaseDao.java
* @author janson_chang
* @param <E>
* @todo BaseDao
*/
public interface BaseDao<E> {
/**
* 返回ID=ID的持久對象
* @param id
* @return E
*/
public E get(String id);
/**
* 返回ID=ID的代理對象
* @param id
* @return E
*/
public E load(String id);
/**
* 返回根據字段的得到的持久對象
* @param name
* @param value
* @return E
*/
public E loadBy(String name, Object value);
/**
* 返回根據數組字段的得到的持久對象
* @param names
* @param values
* @return E
*/
public E loadBy(String[] names, Object[] values);
/**
* 返回保存的對象的ID
* @param entity
* @return String
*/
public String save(E entity);
/**
* 更新對象信息
* @param entity
*/
public void update(E entity);
/**
* saveOrUpdate對象信息
* @param entity
*/
public void saveOrUpdate(E entity);
/**
* 刪除對象
* @param entity
*/
public void delete(E entity);
/**
* 返回所有的對象信息list
* @return List<E>
*/
public List<E> listAll();
/**
* 根據字段name和數據value返回對象list
* @param name
* @param value
* @return List<E>
*/
public List<E> findBy(String name, Object value);
/**
* 根據數組字段name,數據value返回對象list
* @param names
* @param values
* @return List<E>
*/
public List<E> findBy(String[] names, Object[] values);
/**
* 更新内存中的數據
* @param entity
*/
public void refresh(E entity);
/**
* 提交内存中的數據
*/
public void flush();
/**
* 根据域对象类和条件查询对象查询一组域对象
* @param <T>
* @param clazz
* @param enhanceRule
* @return
*/
List<E> query(Class clazz, EnhancedRule enhanceRule);
/**
* 执行SQL
*/
public void executeSQL(String sql);
/**
* 执行HSQL,语句必须符合HSQL规范
*/
public List<E> queryHQL(String sql);
/**
* 执行本地SQL
*/
public List<E> queryNQL(String sql);
}
import java.lang.reflect.ParameterizedType;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
/**
* @file_name BaseDaoHibernateImpl.java
* @author janson_chang
* @param <E>
* @todo BaseDaoHibernateImpl<E>
*/
@SuppressWarnings("unchecked")
public class BaseDaoHibernateImpl<E> extends HibernateDaoSupport implements BaseDao<E> {
/**
*
*/
protected Class<E> entityClass;
/**
*
*/
protected Logger log = Logger.getLogger(this.getClass());
/**
*
*
*/
public BaseDaoHibernateImpl() {
super();
entityClass = (Class<E>) ((ParameterizedType) getClass().getGenericSuperclass())
.getActualTypeArguments()[0];
}
/**
*
* @param entityClassName
* @throws ClassNotFoundException
*/
public void setEntityClass(String entityClassName) throws ClassNotFoundException {
this.entityClass = (Class<E>)Class.forName(entityClassName);
}
/**
*
* @param entityClass
*/
public void setEntityClass(Class<E> entityClass) {
this.entityClass = entityClass;
}
/**
* 返回Criteria
*
* @return Criteria
*/
protected Criteria getCriteria() {
Criteria criteria = getSession().createCriteria(entityClass);
criteria.setCacheable(true);
return criteria;
}
public void executeSQL(String sql){
getSession().createSQLQuery(sql).executeUpdate();
}
public List<E> queryHQL(String sql){
return getSession().createQuery(sql).list();
}
public List<E> queryNQL(String sql){
return getSession().createSQLQuery(sql).list();
}
/**
* @param entity
*/
public void delete(E entity) {
getHibernateTemplate().delete(entity);
flush();
}
/**
* @param name
* @param value
* @return List<E>
*
*/
public List<E> findBy(String name, Object value) {
return findBy(new String[] { name }, new Object[] { value });
}
/**
* @param names
* @param values
* @return List<E>
*
*/
@SuppressWarnings ("unchecked")
public List<E> findBy(String[] names, Object[] values) {
if (names == null || values == null || names.length != values.length) {
throw new HibernateException("Illegal name and values" + names + ":" + values);
}
Criteria criteria = getCriteria();
Map<String, Object> criteriaMap = new HashMap<String, Object>();
for (int i = 0; i < names.length; i++) {
criteriaMap.put(names[i], values[i]);
}
criteria.add(Restrictions.allEq(criteriaMap));
criteria.setCacheable(true);
return criteria.list();
}
/**
*
*/
public void flush() {
getHibernateTemplate().flush();
}
/**
* @param id
* @return E
*/
public E get(String id) {
return (E) getHibernateTemplate().get(entityClass, id);
}
/**
* @return List<E>
*
*/
public List<E> listAll() {
return getHibernateTemplate().loadAll(entityClass);
}
/**
* @param id
* @return E
*/
public E load(String id) {
return (E) getHibernateTemplate().load(entityClass, id);
}
/**
* @param name
* @param value
* @return E
*
*/
public E loadBy(String name, Object value) {
return loadBy(new String[] { name }, new Object[] { value });
}
/**
* @param names
* @param values
* @return E
*
*/
public E loadBy(String[] names, Object[] values) {
E result = null;
List<E> resultList = findBy(names, values);
if (resultList.size() > 0) {
result = resultList.get(0);
}
return result;
}
/**
* @param entity
*
*/
public void refresh(E entity) {
getHibernateTemplate().refresh(entity);
}
/**
* @param entity
* @return String
*/
public String save(E entity) {
return (String) getHibernateTemplate().save(entity);
}
/**
* @param entity
*
*/
public void saveOrUpdate(E entity) {
getHibernateTemplate().saveOrUpdate(entity);
}
/**
* @param entity
*
*/
public void update(E entity) {
getHibernateTemplate().update(entity);
}
public List<E> query(Class clazz, EnhancedRule enhanceRule) {
if (enhanceRule == null) {
return listAll();
}
return enhanceRule.getCriteria (clazz, getSession (false)).list ();
}
}