`
lxiaodao
  • 浏览: 119819 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

基于hibernate的通用、”万能“Dao的设计(三)之通用GenericDao

阅读更多
通用泛型Dao
/**
 * 封装通用的DAO(Data Access Object)类,处理常用的CRUD操作。 
 * 对于简单操作,建议扩展此类使用,如:UserDao extends GenericDao<User, Long>
 * <br/>
 * 
 * @param <T>
 *            域对象类型
 * @param <PK>
 *            主键类型
 * 
 * @author lxiaodao 不再继承 HibernateDaoSupport,自动注入sessionfacroty。
 *         2009-06-05移除操作多个对象的方法,提供直接new的能力。但是建议不要自己new。
 * 
 * 
 */
@SuppressWarnings("unchecked")
public class GenericDao<T, PK extends Serializable> extends BaseDao {

	/**
	 * 用于扩展的DAO子类使用的构造函数.
	 * 
	 * 通过子类的泛型定义取得对象类型Class. eg. public class UserDao extends GenericDao<User,
	 * Long>
	 * 
	 */
	public GenericDao() {
		this.entityClass = ReflectionUtils.getSuperClassGenricType(getClass());	
	}

	/**
	 * 用于Service层直接使用GenericDao的构造函数. 不再提倡在service注入sessionFactory,再注入给dao接口。
	 * eg. GenericDao<User, Long> userDao = new GenericDao<User,
	 * Long>(User.class);
	 * 
	 */
	public GenericDao(SessionFactory sessionFactory, Class<T> entityClass) {
		super(sessionFactory);
		this.entityClass = entityClass;
	}

	// -------------------------------------------------------------------
	// 简单操作数据库方法
	// --------------------------------------------------------------------

	/**
	 * 查询所有对象实体数据
	 */
	public List<T> getAll() {
		return getBaseCriteria().list();
	}

	/**
	 * 根据主键查询实体
	 * 
	 * @param id
	 * @return
	 */
	public T get(final Serializable id) {
		return (T) this.getSession().get(entityClass, id);
	}

	public T load(final Serializable id) {
		return (T) this.getSession().load(entityClass, id);
	}

}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics