`
huanglz19871030
  • 浏览: 241454 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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");   
    }
}  

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics