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

  • 相关阅读:
    小程序-scroll-view用法及属性
    微信小程序--后台交互/wx.request({})方法/渲染页面方法 解析
    设计模式-观察者模式
    设计模式-简单工厂模式
    设计模式-抽象工厂模式
    设计模式-工厂方法模式
    由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射
    处理程序“svc-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”
    CSS中设置height:100%无效的解决方案
    解决火狐中用JQUERY .removeAttr()无法去除元素属性的方法
  • 原文地址:https://www.cnblogs.com/Fskjb/p/1611845.html
Copyright © 2020-2023  润新知