package com.vci.server.base.persistence.dao;
|
|
import java.io.Serializable;
|
import java.util.Collection;
|
import java.util.Iterator;
|
import java.util.List;
|
import java.util.Map;
|
|
import org.hibernate.Criteria;
|
import org.hibernate.LockMode;
|
import org.hibernate.criterion.Criterion;
|
import org.hibernate.criterion.DetachedCriteria;
|
import org.hibernate.type.Type;
|
|
public interface GenericDao<T extends Serializable, PK extends Serializable> {
|
|
//---------------------基本检索、增加、修改、删除操作-----------------------------
|
|
//根据主键获取实体。如果没有相应的实体,返回null。
|
public T getById(PK id);
|
|
//根据主键获取实体并加锁。如果没有相应的实体,返回null。
|
public T getByIdWithLock(PK id, LockMode lock);
|
|
//根据主键获取实体。如果没有相应的实体,抛出异常
|
public T loadById(PK id);
|
|
//根据主键获取实体并加锁。如果没有相应的实体,抛出异常
|
public T loadByIdWithLock(PK id, LockMode lock);
|
|
//获取全部实体
|
public List<T> loadAll();
|
|
//更新实体
|
public void update(T entity);
|
|
//更新实体并加锁
|
public void updateWithLock(T entity, LockMode lock);
|
|
//存储实体到数据库
|
public void save(T entity);
|
|
//增加或更新实体
|
public void saveOrUpdate(T entity);
|
|
//增加或更新集合中的全部实体
|
public void saveOrUpdateAll(Collection<T> entities);
|
|
//删除指定的实体
|
public void delete(T entity);
|
|
//根据主键删除指定的实体
|
public void deleteByKey(PK id);
|
|
//删除集合中的全部实体
|
public void deleteAll(Collection<T> entities);
|
|
//通过合并的方式更新对象
|
public T merge(T entity);
|
|
|
//-----------------------------SQL------------------------------
|
/**
|
* 使用SQL进行删除和更新
|
* <p>Description: </p>
|
*
|
* @author xchao
|
* @time 2012-5-29
|
* @param sql
|
*/
|
public void createSQLQuery(String sql);
|
/**
|
* 使用SQL进行删除和更新,占位符参数传递
|
* <p>Description: </p>
|
*
|
* @author xchao
|
* @time 2012-5-29
|
* @param sql
|
* @param values
|
*/
|
public void createSQLQuery(String sql, Object[] values);
|
/**
|
* 使用SQL进行删除和更新,命名参数传递
|
* <p>Description: </p>
|
*
|
* @author xchao
|
* @time 2012-5-29
|
* @param sql
|
* @param names
|
* @param values
|
*/
|
public void createSQLQuery(String sql, String[] names, Object[] values);
|
/**
|
* 根据SQL查询对象,占位符参数传值
|
* <p>Description: </p>
|
*
|
* @author xchao
|
* @time 2012-5-29
|
* @param sql
|
* @param values
|
* @param param
|
* @param cls
|
* @return
|
*/
|
public List<T> findEntites(String sql, Object[] values, String param, Class cls);
|
/**
|
* 根据SQL查询对象,指定名称(内部名称)参数
|
* <p>Description: </p>
|
*
|
* @author xchao
|
* @time 2012-5-29
|
* @param sql
|
* @param values
|
* @param map
|
* @return
|
*/
|
public List findEntitesBySQL(String sql , Object[] values, Map<String, Type> map);
|
//-----------------------------HSQL------------------------------
|
|
//使用hql进行删除和更新操作
|
public void createQuery(String hql);
|
public void createQuery(String hql, Object[] values);
|
public void createQuery(String hql, String[] names, Object[] values);
|
|
// 使用HSQL语句进行对象查询
|
public T findEntity(String hsql);
|
|
//使用HSQL语即单个属性进行对象查询
|
public T findEntity(String hsql, String name, String value);
|
|
// 使用HSQL语句查询对象集合
|
public List<T> findEntities(String hsql);
|
public List<T> findEntities(String hsql, String name, String value);
|
|
//使用带参数的HSQL语句检索数据
|
public List<T> findEntites(String hsql, Object[] values);
|
|
public List<T> findEntites(String hsql, int start, int number);
|
|
public List<T> findEntites(String hsql, int start, int number, Object[] values);
|
|
//使用命名的HSQL语句检索数据
|
public List<T> findByNamedQuery(String queryName);
|
|
//使用带参数的命名HSQL语句检索数据
|
public List<T> findByNamedQuery(String queryName, Object[] values);
|
|
//使用带命名参数的命名HSQL语句检索数据
|
public List<T> findByNamedQueryAndNamedParam(String query,
|
String[] paramNames, Object[] values);
|
|
//使用HSQL语句检索数据,返回Iterator
|
public Iterator iterate(String queryString);
|
|
//使用带参数HSQL语句检索数据,返回Iterator
|
public Iterator iterate(String queryString, Object[] values);
|
//
|
// //关闭检索返回的Iterator
|
// public void closeIterator(Iterator it);
|
|
//---------------------------------------------Criteria------------------------
|
|
// 创建与会话无关的检索标准对象
|
public DetachedCriteria createDetachedCriteria();
|
|
// 创建与会话绑定的检索标准对象
|
public Criteria createCriteria();
|
|
// 使用指定的检索标准检索数据
|
public List<T> findByCriteria(DetachedCriteria criteria);
|
|
// 使用指定的检索标准检索数据,返回部分记录
|
public List<T> findByCriteria(DetachedCriteria criteria, int firstResult,
|
int maxResults);
|
//
|
// // 使用指定的实体及属性检索(满足除主键外属性=实体值)数据
|
// public List<T> findEqualByEntity(T entity, String[] propertyNames);
|
//
|
// // 使用指定的实体及属性(非主键)检索(满足属性 like 串实体值)数据
|
// public List<T> findLikeByEntity(T entity, String[] propertyNames);
|
|
public List<T> findByCriteria(Criterion... criterion);
|
|
// 使用指定的检索标准检索数据,返回指定范围的记录
|
public Integer getRowCount(DetachedCriteria criteria);
|
|
// 使用指定的检索标准检索数据,返回指定统计值
|
public Object getStatValue(DetachedCriteria criteria, String propertyName,
|
String StatName);
|
|
// 通过给定的一个对象,查找与其匹配的对象,表关联比较多时,用户可以根据需要扩展
|
public List<T> findByExample(T entity);
|
|
// -------------------------------- Others --------------------------------
|
|
// 加锁指定的实体
|
public void lock(T entity, LockMode lockMode);
|
|
// 强制初始化指定的实体
|
// public void initialize(Object proxy);
|
|
// 强制立即更新缓冲数据到数据库(否则仅在事务提交时才更新)
|
public void flush();
|
|
//清空缓存
|
public void clear();
|
}
|