j2ee学习笔记——初试ssh之泛型通用dao(转)

在做项目的时候每次都为每个POJO实体写一个对应的DAO很麻烦,虽然可以由IDE或者一些快速生成工具来生成,但是也难免需要更改。处于这个原因,个人写了一个通用的泛型DAO来封装一些最基本的操作,包括对实体的增删改查。基于Spring的hibernate模板实现,初学,如有什么不好的地方请大家多多拍砖!

Java代码
/** 
* DAO操作基类 本DAO层实现了通用的数据操作 
*  
* @author 黄磊 
*  
* @param <T> 
*            POJO实体对象 
* @param <ID> 
*            ID 
*/ 
public class BaseHibernateDAO<T, ID extends Serializable> extends HibernateDaoSupport {  
 
    private static final Logger logger = Logger.getLogger(BaseHibernateDAO.class);  
 
    /** 
     * 保存指定实体类 
     *  
     * @param entityobj 
     *            实体类 
     */ 
    public void save(T entity) {          
        try {  
            getHibernateTemplate().save(entity);  
        } catch (RuntimeException e) {  
            logger.error("保存实体异常", e);  
            throw e;  
        }  
    }  
 
    /** 
     * 删除指定实体 
     *  
     * @param entityobj 
     *            实体类 
     */ 
    public void delete(T entity) {  
        try {  
            getHibernateTemplate().delete(entity);  
        } catch (RuntimeException e) {  
            logger.error("删除实体异常", e);  
            throw e;  
        }  
    }  
      
    /** 
     * 更新或保存指定实体 
     *  
     * @param entity 实体类 
     */ 
    public void saveOrUpdate(T entity) {  
        try {  
            getHibernateTemplate().saveOrUpdate(entity);  
        } catch (RuntimeException e) {  
            logger.error("更新或保存实体异常", e);  
            throw e;  
        }  
    }  
 
    /** 
     * 查找指定ID实体类对象 
     *  
     * @param entityClass 
     *            实体Class 
     * @param id 
     *            实体ID 
     * @return 实体对象 
     */ 
    @SuppressWarnings("unchecked")  
    public T findById(Class<T> entityClass, ID id) {  
        try {  
            return (T) getHibernateTemplate().get(entityClass, id);  
        } catch (RuntimeException e) {  
            logger.error("查找指定ID实体异常,ID:" + id, e);  
            throw e;  
        }  
    }  
 
    /** 
     * 查找指定属性的实体集合 
     *  
     * @param entityClass 
     *            实体 
     * @param propertyName 
     *            属性名 
     * @param value 
     *            条件 
     * @return 实体集合 
     */ 
    @SuppressWarnings("unchecked")  
    public List<T> findByProperty(Class<T> entityClass, String propertyName,  
            Object value) {  
        try {  
            String queryStr = "from " + entityClass.getName()  
                    + " as model where model." + propertyName + "=?";             
            return getHibernateTemplate().find(queryStr, value);  
        } catch (RuntimeException e) {  
            logger.error("查找指定条件实体集合异常,条件:" + propertyName, e);  
            throw e;  
        }  
    }  
 
    /** 
     * 查询指定HQL语句的分页数据集合 
     *  
     * @param hsql 
     *            HQL语句 
     * @param firstRow 
     *            开始记录号 
     * @param maxRow 
     *            最大记录号 
     * @return 分页数据集合 
     * @throws Exception 
     *             抛出异常 
     */ 
    @SuppressWarnings("unchecked")  
    public List<T> findByPage(final String hsql, final int firstRow,  
            final int maxRow) {       
        try {  
            return getHibernateTemplate().executeFind(new HibernateCallback() {  
                public Object doInHibernate(Session s)  
                        throws HibernateException, SQLException {  
                    Query query = s.createQuery(hsql);  
                    query.setFirstResult(firstRow);  
                    query.setMaxResults(maxRow);  
                    List list = query.list();  
                    return list;  
                }  
            });  
        } catch (RuntimeException e) {  
            logger.error("分页查询异常,HQL:" + hsql, e);  
            throw e;  
        }  
    }     
      
    /** 
     * 从Spring上下文中获取本类对象 
     * 此方法可能存在线程并发问题(待测) 
     *  
     * @param context Spring上下文 
     * @return 本类对象  
     */ 
    @SuppressWarnings("unchecked")  
    public static BaseHibernateDAO getFromApplicationContext(WebApplicationContext context) {  
        return (BaseHibernateDAO)context.getBean("BaseHibernateDAO");  
    }

 

posted @ 2009-11-27 10:57  Fskjb  阅读(2194)  评论(0编辑  收藏  举报
年年行好运