/* ================================================================== * Created [2009-4-27 下午11:32:55] by Jon.King * ================================================================== * TSS * ================================================================== * mailTo:jinpujun@hotmail.com * Copyright (c) Jon.King, 2009-2012 * ================================================================== */ package com.jinhe.tss.core.persistence; import java.io.Serializable; import java.util.Collection; import java.util.List; /** * DAO的一些基本方法 * * @param <T> */ public interface IDao<T extends IEntity> { Class<T> getType(); /** 使PO成为游离状态,即非托管状态 (detached entity) */ void evict(Object o); /** 刷新缓存,将一级缓存的托管实体(attached entity)更新到数据库 */ void flush(); /** * 保存对象:新增或者修改 * @param obj * @return */ T create(T obj); T createWithoutFlush(T entity); Object createObject(Object entity); Object createObjectWithoutFlush(Object entity); /** * 更新实体,merge * @param entity */ Object update(Object entity); Object updateWithoutFlush(Object entity); /** * 根据主键值删除对象记录 * @param clazz * @param id */ Object delete(Class<?> clazz, Serializable id); T deleteById(Serializable id); Object delete(Object entity); void deleteAll(Collection<?> c); /** * 根据主键值获取对象,延迟方式 * @param clazz * @param id * @return */ IEntity loadEntity(Class<?> clazz, Serializable id); /** * 根据主键值获取对象 * @param clazz * @param id * @return */ IEntity getEntity(Class<?> clazz, Serializable id); T getEntity(Serializable id); /** * 根据HQL语句和参数值获取对象列表 * @param hql * @return List,never return null */ List<?> getEntities(String hql, Object...conditionValues); List<?> getEntities(String hql, Object[] conditionNames, Object[] conditionValues); /** * 根据原生SQL查询 * * @param nativeSql * @param entityClazz * @param params * @return */ List<?> getEntitiesByNativeSql(String nativeSql, Class<?> entityClazz, Object...params); List<?> getEntitiesByNativeSql(String nativeSql, Object...params); /** * 根据查询条件和分页信息查询对象列表 * 注: * 如果是多表查询,则子类中需要重写 Object[] getEntities(...) * @param condition * @param className * @param currentPageNum * @param pagesize * @return */ Object[] getEntities(QueryCondition condition, String className); Object[] getEntities(QueryCondition condition, String className, String others); /** * 执行HQL语句,一般为delete、update类型 * @param hql */ void executeHQL(String hql, Object...params); void executeHQL(String hql, String[] argNames, Object[] params); /** * 执行SQL语句,一般为delete、update类型 * @param hql */ void executeSQL(String sql, Object...params); void executeSQL(String sql, String[] argNames, Object[] params); /** * 将ID列表插入临时表,以用于查询时候关联使用。用于替代 IN 查询。 */ void insertIds2TempTable(List<?> list); void insertIds2TempTable(List<? extends Object[]> list, int idIndex); void insertIds2TempTable(Object[] idArray); void insertEntityIds2TempTable(List<? extends IEntity> list); void clearTempTable(); }