package org.howsun.dao;
import java.io.Serializable;
import java.util.List;
import org.howsun.dao.page.Page;
/**
* @Description:GenericDao,通用数据访问组件
*
* @author 张纪豪
* @Date 2007-9-18
* @version v2.0
*/
public interface GenericDao {
/**
* 保存
* @param object
*/
public void save(Object object);
/**
* 更新
* @param object
*/
public void update(Object object);
/**
* 按需字段更新<br>
* e.g: update Entity set f1=?, f2=? where id=?
*
* @param <T>
* @param entityName
* @param fields 字段名,多个字段用逗号隔开,字段中不需要=?
* @param values 字段的值
* @param id
*/
public <T> int update(Class<T> entityName, String[] fields, Object[] fieldValues, Serializable id);
/**
* 批量更新
* e.g:
* "a=1 and b=false"
* "a=1,b=false"
* "a,b"
* "a=1,b=false"
* @param <T>
* @param entityName 实体名
* @param fields 字段名,多个字段用逗号隔开,字段中不需要=?
* @param condition 要更新的字段和条件 。e.g: "a,b"、"a=? and b=false"、"a=1,b=false"
* @param values 先提供字段的值,再提供条件的值
* @return
*/
public <T> int updateByBatch(Class<T> entityName, String fields, String condition, Object[] values);
/**
* 更新
* @param object
*/
public void merge(Object object);
/**
* 删除即时对象
* @param object
* @return
*/
public int delete(Object object);
/**
* 删除,支持批量删除
* @param <T>
* @param entityClass
* @param entityids
*/
public <T> int delete(Class<T> entityClass, Serializable ... entityids);
/**
* 根据条件删除
* @param <T>
* @param entityClass
* @param condition
* @param params
* @return
*/
public <T> int delete(Class<T> entityClass, String condition, Object[] params);
/**
* 单个对象查找
* @param <T>
* @param entityClass
* @param entityid
* @return t
*/
public <T> T find(Class<T> entityClass, Serializable entityid);
/**
* ORM查询语言定制查询
* @param <T>
* @param entityClass
* @param condition
* @param params
* @return
*/
public <T> T findByXQL(Class<T> entityClass, String condition, Object[] params);
/**
* 用原生SQL语言查询
* @param <T>
* @param entityClass
* @param whereql
* @param params
* @return
*/
public <T> T findBySQL(String sql, Object[] params);
/**
* 可定制字段查询,对象中需要与可定制字段对应的构造方法
* 注意:当有外连接查询时,条件中的字段一定要加别名,例如o.userid=?
* @param <T>
* @param entityClass
* @param fields
* @param page
* @param whereql
* @param params
* @param order
* @return
*/
public <T> List<T> finds(
Class<T> entityClass,
String fields,
Page page,
String condition,
Object[] params,
OrderBean order);
/**
* 清除会话,对象变成游离态
*/
public void clear();
/**
* 提交
*/
public void flush();
/**
* 多结果查询一:支持分页、条件参数、排序
* @param <T>
* @param entityClass
* @param first
* @param maxResult
* @param whereql
* @param params
* @param order
* @return t
*/
<T> List<T> finds(
Class<T> entityClass,
Page page,
String condition,
Object[] params,
OrderBean order);
/**
* 多结果查询二:支持分页、条件参数
* @param <T>
* @param entityClass
* @param first
* @param maxResult
* @param whereql
* @param params
* @return t
*/
<T> List<T> finds(Class<T> entityClass, Page page, String condition, Object[] params);
/**
* 多结果查询三:支持分页、排序
* @param <T>
* @param entityClass
* @param first
* @param maxResult
* @param order
* @return t
*/
<T> List<T> finds(Class<T> entityClass, Page page, OrderBean order);
/**
* 多结果查询四:支持分页
* @param <T>
* @param entityClass
* @param first
* @param maxResult
* @return t
*/
<T> List<T> finds(Class<T> entityClass, Page page);
/**
* 多结果查询五:排序不分页
* @param <T>
* @param entityClass
* @return t
*/
<T> List<T> finds(Class<T> entityClass,OrderBean order);
/**
* 多结果查询六:
* @param <T>
* @param entityClass
* @return t
*/
<T> List<T> finds(Class<T> entityClass);
/**
* 多结果查询七:
* 利用自定义的SQL语句查询,带分页和条件
* @param <T>
* @param entityClass
* @return
*/
List<?> findsByXQL(String xql, Page page, Object[] params);
/**
* 多结果查询七:
* 利用自定义的SQL语句查询,带分页和条件
* @param <T>
* @param entityClass
* @return
*/
List<?> findsBySQL(String sql, Page page, Object[] params);
/**
* 多结果查询八:
* 利用自定义的SQL语句查询,带条件
* @param <T>
* @param entityClass
* @return
* @throws Exception
*/
List<?> findsBySQL(String sql, Object[] params);
/**
* 统计
* @param <T>
* @param entityClass
* @return t
* @throws Exception
*/
<T> long getCount(Class<T> entityClass);
/**
* 统计
* @param <T>
* @param entityClass
* @param condition
* @param params
* @return
*/
<T> long getCount(Class<T> entityClass, String condition, Object[] params);
/**自增长主键**/
Long nextId(Class<?> entityClass);
/**
* 递增某字段值,例如递增点击数
* @param entityName
* @param fields
* @param fieldValues
* @param id
*/
public <T> void increaseFieldValue(Class<T> entityName, String field, Integer defaultValue, Serializable id);
/**
* 扩展执行器
* @param extendExecutant
*/
void execute(ExtendExecutant extendExecutant);
}