All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.swiftdao.CrudDao Maven / Gradle / Ivy

The newest version!
package org.swiftdao;

import org.swiftdao.entity.Persistable;

import java.util.Collection;
import java.util.List;
import java.util.Map;

import org.springframework.dao.DataAccessException;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

/**
 * 提供了常用增删改查(CRUD)功能的DAO基础接口。
* 实体状态说明: * *
 *     持久化状态:已经被持久化了且与当前Session关联的实体状态。
 *     临时状态:没有被持久化过的实体状态。
 *     游离状态:已经被持久化,但是没有与当前Session关联的实体对象,且有相同标识的对象与当前Session关联。
 * 
* * @param * @author Wang Yuxing * @version 1.0 */ @Transactional(isolation = Isolation.DEFAULT, propagation = Propagation.REQUIRED) public interface CrudDao extends ExecutableDao { /** * 持久化一个实体。 * * @param entity 处于临时状态的实体。 * @throws DataAccessException 数据访问异常 */ void create(E entity) throws DataAccessException; /** * 持久化多个实体。 * * @param entities 处于临时状态的实体的集合。 * @throws DataAccessException 数据访问异常 */ void create(Collection entities) throws DataAccessException; /** * 更新实体。 * * @param entity 处于持久化状态的实体。 * @throws DataAccessException 数据访问异常 */ void update(E entity) throws DataAccessException; /** * 更新多个实体。 * * @param entities 处于持久化状态的实体的集合。 * @throws DataAccessException 数据访问异常 */ void update(Collection entities) throws DataAccessException; /** * 持久化或者更新实体。 * * @param entity 处于临时或者持久化状态的实体。 * @throws DataAccessException 数据访问异常 */ void createOrUpdate(E entity) throws DataAccessException; /** * 持久化或者更新多个实体。 * * @param entities 处于临时或者持久化状态的实体的集合。 * @throws DataAccessException 数据访问异常 */ void createOrUpdate(Collection entities) throws DataAccessException; /** * 更新处于游离状态的实体,更新后实体对象仍然处于游离状态。 * * @param entity 处于游离状态的实体。 * @throws DataAccessException 数据访问异常 */ void merge(E entity) throws DataAccessException; /** * 保存处于游离状态的多个实体,更新后实体对象仍然处于游离状态。 * * @param entities 处于游离状态的实体的集合。 * @throws DataAccessException 数据访问异常 */ void merge(Collection entities) throws DataAccessException; /** * 删除一个持久化的实体。 * * @param entity 处于持久化状态的实体。 * @throws DataAccessException 数据访问异常 */ void delete(E entity) throws DataAccessException; /** * 删除多个持久化的实体。 * * @param entities 处于持久化状态的实体的集合。 * @throws DataAccessException 数据访问异常 */ void delete(Collection entities) throws DataAccessException; /** * 按照唯一的(Unique)属性名和属性值对,查询得到一个唯一的实体对象。 * * @param uniqueParamName 实体唯一属性名 * @param value 属性值 * @return 持久化实体 * @throws DataAccessException 数据访问异常 */ @Transactional(readOnly = true) E findByUniqueParam(String uniqueParamName, String value) throws DataAccessException; /** * 按照多个唯一的(Unique)属性名和属性值对,查询得到一个唯一的实体对象。 * @param params 多个参数值 * @return 持久化实体 * @throws DataAccessException 数据访问异常 */ @Transactional(readOnly = true) E findByUniqueParams(Map params) throws DataAccessException; /** * 按照指定的属性值查询多个实体对象。 * * @param paramName 实体属性名。 * @param value 对应实体属性名的属性值。 * @return 持久化实体集合 * @throws DataAccessException 数据访问异常 */ @Transactional(readOnly = true) List findByParam(String paramName, Object value) throws DataAccessException; /** * 按照指定属性值查找多个实例,并按照分页条件分页,返回指定页的实体集合。 * * @param paramName 作为查询条件的属性名。 * @param value 查询条件属性值。 * @param pageSize 每页大小。 * @param pageNumber 查询的页码,0表示第一页。 * @return 持久化实体集合 * @throws DataAccessException 数据访问异常 */ @Transactional(readOnly = true) List findByParamPagination(String paramName, Object value, int pageSize, int pageNumber) throws DataAccessException; /** * 按照指定属性值、排序条件和分页条件进行查找指定页的多个实例。 * * @param paramName 作为查询条件的属性名。 * @param value 查询条件属性值。 * @param orderParam 排序的属性名,null为没有排序条件 * @param isDescending 是否是降序排序,当orderParam可用是才有效。 * @param pageSize 每页大小。 * @param pageNumber 查询的页码,0表示第一页。 * @return 指定页的持久化实体集合 * @throws DataAccessException 数据访问异常 */ @Transactional(readOnly = true) List findByParamPagination(String paramName, Object value, String orderParam, boolean isDescending, int pageSize, int pageNumber) throws DataAccessException; /** * 按照指定的属性值映射查找多个实体对象。 * * @param paramMap 实体类属性名和属性值的映射。 * @return 持久化实体集合 * @throws DataAccessException 数据访问异常 */ @Transactional(readOnly = true) List findByParams(Map paramMap) throws DataAccessException; /** * 按照指定的条件表达式查找多个实体对象。 *
	 * Map params = new HashMap();
	 * params.put("name", "Jack");
	 * params.put("age", "16");
	 * List result = findByParams("userName = :name and userAge = :age", params);
	 * 
	 * @param extraCondition 包含形如":param"的条件表达式
	 * @param extraParams 条件表达式中的参数值
	 * @return 持久化实体集合
	 * @throws DataAccessException 数据访问异常
	 */
	@Transactional(readOnly = true)
	List findByParams(String extraCondition, Map extraParams) throws DataAccessException;

	/**
	 * 按照指定的属性值映射查找多个实体对象。
	 * 
	 * Map params1 = new HashMap();
	 * params1.put("name", "Jack");
	 * Map params2 = new HashMap();
	 * params.put("age1", "16");
	 * params.put("age2", "18");
	 * List result = findByParams(params1, " and (userAge = :age1 or userAge = :age2)", params);
	 * 
	 * @param paramMap 实体类属性名和属性值的映射。
	 * @param extraCondition 额外的查询条件,跟在paramMap的后面,类似“ OR XX = :xx”的形式,没有则为null。
	 * @param extraParams 配合extraCondition使用,用于保存extraCondition中的变量。
	 * @return 持久化实体集合
	 * @throws DataAccessException 数据访问异常
	 */
	@Transactional(readOnly = true)
	List findByParams(Map paramMap, String extraCondition, Map extraParams) throws DataAccessException;

	/**
	 * 按照指定属性值映射、分页条件查找多个实例。
	 * @param paramMap 查询条件,
	 * @param pageSize 每页大小。
	 * @param pageNumber 查询的页码,0表示第一页。
	 * @return 指定页的持久化实体集合
	 * @throws DataAccessException 数据访问异常
	 */
	@Transactional(readOnly = true)
	List findByParamsPagination(Map paramMap, int pageSize, int pageNumber)
			throws DataAccessException;

	/**
	 * 按照指定属性值映射查找多个实例,并按照分页条件分页,返回指定页的实体列表。
	 * @param condition 查询条件,类似“ WHERE AA = :aa OR XX = :xx”的形式,没有则为null。
	 * @param params 配合condition使用,用于保存condition中的变量值。
	 * @param pageSize 每页大小。
	 * @param pageNumber 查询的页码,0表示第一页。
	 * @return 指定页的持久化实体集合
	 * @throws DataAccessException 数据访问异常
	 */
	@Transactional(readOnly = true)
	List findByParamsPagination(String condition, Map params, int pageSize, int pageNumber)
			throws DataAccessException;

	/**
	 * 按照指定属性值映射查找多个实例,并按照分页条件分页,返回指定页的实体列表。
	 * 
	 * @param paramMap 查询条件,如果需要更灵活的条件,使用extraCondition。
	 * @param extraCondition 额外的查询条件,跟在paramMap组成的参数后面,类似“ OR XX = :xx”或者“ WHERE xxx != :xx”的形式,没有则为null。
	 * @param extraParams 配合extraCondition使用,用于保存extraCondition中的变量。
	 * @param pageSize 每页大小。
	 * @param pageNumber 查询的页码,0表示第一页。
	 * @return 指定页的持久化实体集合
	 * @throws DataAccessException 数据访问异常
	 */
	@Transactional(readOnly = true)
	List findByParamsPagination(Map paramMap, String extraCondition,
			Map extraParams, int pageSize, int pageNumber) throws DataAccessException;

	/**
	 * 按照指定属性值映射、排序条件和分页条件进行查找指定页的多个实例。
	 * @param paramMap 查询条件。
	 * @param orderParam 排序的属性名,null为没有排序条件
	 * @param isDescending 是否是降序排序,当orderParam可用是才有效。
	 * @param pageSize 每页大小。
	 * @param pageNumber 查询的页码,0表示第一页。
	 * @return  指定页的持久化实体集合
	 * @throws DataAccessException 数据访问异常
	 */
	@Transactional(readOnly = true)
	List findByParamsPagination(Map paramMap, String orderParam, boolean isDescending,
			int pageSize, int pageNumber) throws DataAccessException;

	/**
	 * 按照指定参数值映射和额外的查询条件、排序条件和分页条件查找多个实例。
	 * @param paramMap 查询条件。
	 * @param extraCondition 额外查询条件,跟在paramMap的后面,类似“ OR XX = :xx”的形式,没有则为null。
	 * @param extraParams 配合extraCondition使用,用于保存extraCondition中的变量。
	 * @param orderParam 排序的属性名,null为没有排序条件
	 * @param isDescending 是否是降序排序,当orderParam可用是才有效。
	 * @param pageSize 每页大小。
	 * @param pageNumber 查询的页码,0表示第一页。
	 * @return 指定页的持久化实体集合
	 * @throws DataAccessException 数据访问异常
	 */
	@Transactional(readOnly = true)
	List findByParamsPagination(Map paramMap, String extraCondition,
			Map extraParams, String orderParam, boolean isDescending,
			int pageSize, int pageNumber) throws DataAccessException;

	/**
	 * 按照泛型的实体类型查询得到所有持久化实体。
	 * 如果实体类被设置为缓存的,则该方法首先从缓存中获取。
	 * @return 所有持久化实体的集合(TBD consider to be collection in the future)
	 * @throws DataAccessException 数据访问异常
	 */
	@Transactional(readOnly = true)
	List findAll() throws DataAccessException;

	/**
	 * 按照指定实体类型查询得到所有持久化实体。
	 * 如果实体类被设置为缓存的,则该方法首先从缓存中获取。
	 * 
	 * @param clazz 实体类类型
	 * @return 所有持久化实体的集合
	 * @throws DataAccessException 数据访问异常
	 */
	@Transactional(readOnly = true)
	List findAll(Class clazz) throws DataAccessException;

	/**
	 * 忽略实体类的缓存配置,直接查询所有持久化实体。
	 * 
	 * @param clazz 实体类类型
	 * @return 所有持久化实体的集合
	 * @throws DataAccessException 数据访问异常
	 */
	List findAllOverCache(Class clazz) throws DataAccessException;

	/**
	 * 在所有的持久化实体中查询指定页的实体集合。
	 * 
	 * @param pageSize 每页大小
	 * @param pageNumber 查询的页码,0表示第一页。
	 * @return 指定页的持久化实体集合
	 * @throws DataAccessException 数据访问异常
	 */
	@Transactional(readOnly = true)
	List findAllByPagination(int pageSize, int pageNumber) throws DataAccessException;

	/**
	 * 在所有的持久化实体中按照排序方式查询指定页的实体集合。
	 * 
	 * @param orderParam 排序的属性名,null为没有排序条件
	 * @param isDescending 是否是降序排序,当orderParam可用是才有效。
	 * @param pageSize 每页大小。
	 * @param pageNumber 查询的页码,0表示第一页。
	 * @return 指定页的持久化实体集合
	 * @throws DataAccessException 数据访问异常
	 */
	@Transactional(readOnly = true)
	List findAllByPagination(String orderParam, boolean isDescending, int pageSize, int pageNumber)
			throws DataAccessException;

	/**
	 * 统计所有持久化实体对象的数量。
	 * 
	 * @return 所有持久化实体对象的数量
	 * @throws DataAccessException 数据访问异常
	 */
	@Transactional(readOnly = true)
	long countAll() throws DataAccessException;

	/**
	 * 按条件统计持久化实体对象的数量。
	 * 
	 * @param paramName 属性名
	 * @param value 属性值
	 * @return 持久化实体的数量
	 * @throws DataAccessException 数据访问异常
	 */
	@Transactional(readOnly = true)
	long countByParam(String paramName, Object value) throws DataAccessException;

	/**
	 * 按给定的限制条件统计持久化实体对象的数量。
	 * 
	 * @param paramMap 查询条件参数
	 * @return 符合条件的持久化实体的数量
	 * @throws DataAccessException 数据访问异常
	 */
	@Transactional(readOnly = true)
	long countByParams(Map paramMap) throws DataAccessException;

	/**
	 * 按给定的限制条件统计实体对象的数量。
	 * @param paramMap 查询条件参数,为空表示没有参数;其中的参数值不能为空
	 * @param extraCondition 额外查询条件,跟在paramMap的后面,类似“ OR XX = :xx”的形式,没有则为null。
	 * @param extraParams 配合extraCondition使用,用于保存extraCondition中的变量。
	 * @return 符合条件的持久化实体的数量
	 * @throws DataAccessException 数据访问异常
	 */
	@Transactional(readOnly = true)
	long countByParams(Map paramMap, String extraCondition, Map extraParams) throws DataAccessException;

	/**
	 * 获得指定Sequence的值(仅用于Oracle)
	 * @param seqName Sequence名称
	 * @return Sequence值
	 * @throws DataAccessException 数据访问异常
	 */
	long getSequence(String seqName) throws DataAccessException;
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy