您的位置:首页 > 其它

基于泛型的通用Dao接口和hibernate的实现

2008-12-14 17:33 609 查看
基于泛型的通用Dao接口:(主要是在使用hibernate或JPA时使用)

package com.qiujy.dao;

import java.io.Serializable;

import java.util.List;

/**

* 基于泛型的通用Dao接口

*/

public interface GenericDao<T> {

void create(T entity);

void delete(T entity);

void update(T entity);

T findById(Serializable id);

List<T> findAll();

List<T> findList(int pageNo, int pageSize);

int getCountOfAll();

}

hibernate对此泛型Dao接口的使用:

package com.qiujy.dao.hibernate;

import java.io.Serializable;

import java.lang.reflect.ParameterizedType;

import java.util.List;

import org.hibernate.criterion.Projections;

import com.qiujy.common.HibernateUtil;

import com.qiujy.dao.GenericDao;

/**

* Hibernate对泛型通用Dao接口的实现

*/

public class GenericHibernateDaoImpl<T> implements GenericDao<T> {

private Class<T> clazz;

@SuppressWarnings("unchecked")

public GenericHibernateDaoImpl() {

//通过反射获取T的类型信息实例

this.clazz = (Class<T>)((ParameterizedType)this.getClass().getGenericSuperclass())

.getActualTypeArguments()[0];

}

public void create(T entity) {

HibernateUtil.getSession().save(entity);

}

public void delete(T entity) {

HibernateUtil.getSession().delete(entity);

}

@SuppressWarnings("unchecked")

public void update(T entity) {

//HibernateUtil.getSession().saveOrUpdate(entity);

entity = (T) HibernateUtil.getSession().merge(entity);

}

@SuppressWarnings("unchecked")

public List<T> findAll() {

return HibernateUtil.getSession().createCriteria(clazz).list();

}

@SuppressWarnings("unchecked")

public List<T> findList(int pageNo, int pageSize) {

return HibernateUtil.getSession().createCriteria(clazz)

.setFirstResult((pageNo - 1) * pageSize)

.setMaxResults(pageSize)

.list();

}

public int getCountOfAll() {

Integer count = (Integer) HibernateUtil.getSession()

.createCriteria(clazz)

.setProjection(Projections.rowCount())

.uniqueResult();

if (null == count) {

return 0;

} else {

return count.intValue();

}

}

@SuppressWarnings("unchecked")

public T findById(Serializable id) {

return (T)HibernateUtil.getSession().load(clazz, id); //get

}

}

使用泛型Dao接口:

package com.qiujy.dao;

import java.util.List;

import com.qiujy.domain.Resource;

/**

* Resource类的Dao接口

*/

public interface ResourceDao extends GenericDao<Resource> {

public List<Resource> findResources(int status);

}

使用hibernate的实现:

package com.qiujy.dao.hibernate;

import java.util.List;

import com.qiujy.common.HibernateUtil;

import com.qiujy.dao.ResourceDao;

import com.qiujy.domain.Resource;

public class ResourceDaoImpl extends GenericHibernateDaoImpl<Resource> implements ResourceDao {

@SuppressWarnings("unchecked")

public List<Resource> findResources(int status) {

return (List<Resource>)HibernateUtil.getSession()

.createQuery("from Resource where status=:status")

.setInteger("status", status)

.list();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: