`
anson_xu
  • 浏览: 514826 次
  • 性别: Icon_minigender_1
  • 来自: 惠州
社区版块
存档分类

J2EE学习笔记——初试SSH之泛型通用DAO

    博客分类:
  • SSH
阅读更多
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");  
    }  
      

分享到:
评论

相关推荐

    ssh通用泛型DAO

    在这个主题中,我们将深入探讨"ssh通用泛型DAO"的相关知识点。 首先,我们来了解"BaseHibernateDAO"。BaseHibernateDAO是基于Hibernate框架的一个基类,它封装了常见的数据库操作,如增删查改(CRUD)。通过继承这...

    泛型通用DAO,可以很简化DAO层的代码

    例如,我们可以有如下的泛型DAO接口: ```java public interface GenericDao&lt;T&gt; { void save(T entity); T get(Class&lt;T&gt; clazz, int id); void update(T entity); void delete(int id); } ``` 然后,对于特定...

    泛型dao 泛型dao 泛型dao

    泛型dao接口 :GenericDao, ID extends Serializable&gt; 泛型作为DAO的通用接口 CRUD方法 dao接口 : PersonDAO extends GenericDao, Integer&gt; 可以不写代码,方法已经在父类泛型dao里了,这里为了说明:可扩展添加 ...

    ssh整合下的通用泛型DAO+分页

    在这个特定的讨论中,我们聚焦于SSH1中的一个关键概念:通用泛型DAO(Data Access Object)以及分页功能的实现。DAO层是模型层和数据访问层之间的桥梁,它的主要职责是处理数据库操作,为业务层提供无状态的数据访问...

    ssh通用基于泛型的dao

    1. `GenericDAO.java`:泛型DAO接口,定义了基本的CRUD方法。 2. `HibernateGenericDAO.java`:实现了`GenericDAO`接口的具体类,使用Hibernate作为底层的数据访问技术。 3. `BaseDAO.java`:可能是一个抽象类,包含...

    C++ Primer学习笔记——$11 泛型算法

    在C++编程中,泛型算法是标准库提供的强大工具,它们可以应用于各种不同类型的容器,无论容器内部存储的数据类型如何。这些算法不依赖于特定的容器实现,而是通过迭代器来操作容器中的元素,因此具有高度的通用性。...

    ssh2 + dao泛型

    这篇博客"ssh2 + dao泛型"结合了这两个概念,探讨了如何在SSH2框架下利用泛型优化DAO层的操作。 SSH2框架主要由Spring、Struts和Hibernate三个部分组成,它为Java Web开发提供了强大的支持。Spring提供依赖注入和...

    SSH 泛型DAO分页

    这个压缩包文件的标题"SSH 泛型DAO分页"表明它提供了一个实现SSH框架整合的示例,特别关注了泛型DAO(Data Access Object)以及分页功能。下面将详细介绍SSH框架及其分页和泛型DAO的概念。 1. **Struts2**: Struts2...

    SSH泛型代码实例

    - `DAO(1).rar`可能包含使用泛型的DAO设计模式示例,展示了如何创建泛型DAO以处理不同类型的数据对象。 综上所述,SSH框架结合泛型能够提升Java应用的开发效率和代码质量。通过学习和理解这些示例,开发者可以更好...

    java 基于泛型与反射的通用 DAO

    综上所述,这个项目展示了如何利用Java的泛型和反射技术实现一个通用的DAO,使得数据库操作更加灵活和易于维护。泛型确保了类型安全,而反射则提供了运行时的动态行为。这种设计模式在实际开发中非常常见,尤其是在...

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

    Hibernate 对泛型Dao接口的实现主要通过继承泛型Dao接口,使用 Hibernate 的 Session 对象来实现数据访问。 Hibernate 对泛型Dao接口的实现的优点: 1. 简化数据访问:Hibernate 对泛型Dao接口的实现可以简化数据...

    JdbcTemplate通用泛型Dao实现

    本文将深入探讨`JdbcTemplate`通用泛型Dao实现的相关知识点,帮助开发者更好地理解和应用这一技术。 首先,让我们了解什么是`JdbcTemplate`。它是Spring框架的一部分,用于处理SQL操作。`JdbcTemplate`提供了一组...

    hibernate不是泛型的通用DAo1

    例如,一个泛型DAO接口可能定义如下: ```java public interface GenericDao&lt;T&gt; { void save(T entity); T get(Long id); void update(T entity); void delete(T entity); } ``` 然后,对于一个名为`User`的实体...

    一个很好的通用泛型dao(含源码)

    为什么我们要使用通用DAO接口呢,因为我们的数据库操作无非是增删改查,CRUD操作,我们不需要为每个实体去编写一个dao接口,对于相似的实体操作可以只编写一个通用接口,然后采用不同的实现! DAO已经成为持久层...

    Java学习笔记——良葛格

    "Java学习笔记——良葛格"是一份专为初学者设计的教程资料,由良葛格精心编写,旨在帮助读者掌握JDK5.0版本的Java基础知识。JDK(Java Development Kit)是Java开发的核心工具集,包含了编译器、调试器和运行环境等...

    JAVA_J2EE大作业——学生信息管理系统.doc

    JAVA_J2EE大作业——学生信息管理系统 本资源是一个基于 JAVA 和 J2EE 的学生信息管理系统的大作业,使用了 XML 解析技术和 Java Servlet 技术来实现学生信息的管理。 知识点 1:XML 解析技术 在本系统中,使用了...

    经典泛型dao层代码,非常好用简易

    ### 泛型DAO层在SSH框架中的应用与详解 #### 引言 在现代软件开发中,特别是基于Java的企业级应用开发中,DAO(Data Access Object)层的设计扮演着至关重要的角色。它作为业务逻辑层与数据持久层之间的桥梁,承担...

    泛型dao

    【泛型DAO】是一种在Java开发中常见的设计模式,它利用了Java泛型特性来提高代码的可重用性和类型安全性。在Java中,DAO(Data Access Object)模式是用来封装对数据库的操作,将业务逻辑与数据访问逻辑分离,使得...

    基于java泛型的通用DAO(CURD)实现

    现在无论做什么应用,基本上都会有涉及对象... 其实,利用Java面向对象的基本特性及JDK5新引入的泛型语法,我们可以创建通用的DAO对象的CRUD方法,同时又可保证类型的安全性。下面DAO的实现以Hibernate为基础加以演示。

    Hibernate泛型DAO接口,大部分通用都已包括

    在实际开发中,为了提高代码的可重用性和可维护性,通常会创建泛型DAO(Data Access Object)接口来处理与数据库交互的通用逻辑。本篇将详细介绍"Hibernate泛型DAO接口,大部分通用都已包括"这一主题。 首先,让...

Global site tag (gtag.js) - Google Analytics