`
Getwaysun
  • 浏览: 32083 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

通用DAO理解,包括异常处理(转载)

 
阅读更多
关键字: 通用dao理解, 请大家指正

首先声明我的资料大我来自javaeye,先谢谢各位.
但因本人理解能力不足,现把我对通用DAO的引用贴出,望大家指点.

1.BaseDAO 接口

public interface BaseDAO<T, ID extends Serializable> {
public void save(T entity);
public void delete(T entity);
public T findById(Class<T> entityClass, ID id);
}

2.BaseDAO 的实现

public class BaseHibernateDAO<T, ID extends Serializable> extends HibernateDaoSupport implements BaseDAO<T,ID> {  
      private static final Logger logger = Logger.getLogger(BaseHibernateDAO.class);  
    public void save(T entity) {          
        try {  
            getHibernateTemplate().save(entity);  
        } catch (RuntimeException e) {  
            logger.error("保存实体异常", e);  
            throw e;  
        }  
    }  

    public void delete(T entity) {  
        try {  
            getHibernateTemplate().delete(entity);  
        } catch (RuntimeException e) {  
            logger.error("删除实体异常", e);  
            throw e;  
        }  
    }  

    public void saveOrUpdate(T entity) {  
        try {  
            getHibernateTemplate().saveOrUpdate(entity);  
        } catch (RuntimeException e) {  
            logger.error("更新或保存实体异常", e);  
            throw e;  
        }  
    }  

    @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;  
        }  
    } 


3.一个实体DAO接口extends BaseDAO

public interface ProductDAO extends BaseDAO<Product,Integer>{
//如添加
public void productInsert(Product entity);
         public void findById(Product entityClass, Integer id)
        //如除crud外Product自己的业务的方法
          public void myProductDelete(class clz,Serializable pk);
......
}

4.实体DAO的实现

public class ProductDAOImpl extends BaseHibernateDAO<Product,Integer> implements
ProductDAO {
       public void productInsert(Product entity) {
save(entity);
       }
    public void findById(Class<T> entityClass, ID id) {
findById(entityClass,id);
       }
        public void myProductDelete(class clz,Serializable pk){
           Object object = this.getHibernateTemplate().get(clazz, pk);
this.getHibernateTemplate().delete(object);     
}
  ........
}

5.service层 实体接口

public interface ProductService {
// 添加
public void productInsert(Product entity) throws ProductException;
         public void save(Product  entity) throws ProductException;
public void delete(Product  entity) throws ProductException;
public Product findById(Product entityClass, Integer) throws ProductException;
}

6.service层 实体service实现

public class ProductServiceImpl implements ProductService {
private ProductDAO productDAOImpl;

public void delete(int id) throws ProductException {
try{
productDAOImpl.Delete(productDAOImpl.findproductByPrimaryKey(id));
}catch(Exception e ){
e.printStackTrace();
throw new ProductException(this.getClass().getName()+"Product Delete 删除失败");
}
}

public void save(Product product) throws ProductException {
try{
productDAOImpl.save(product);
}catch(Exception e){
e.printStackTrace();
throw new ProductException(this.getClass().getName()+"Product Insert 添加失败");
}
.......
}


原作者:http://blog.csdn.net/yao_2008/article/details/4258041
引用
请大家帮我看看我这个通用baseDAO的设计是否合理?
具体如:
1.dao的设计有没错?
2.T Class<T>等泛型,反射有没错?
3.service层的传值有没错?
4.这样的异常处理合理吗?
5.就这样的写法是否存在不合理的的写法,而我又不知道的?


     各位拍砖吧,至少知道那里不足,继续学习..........
分享到:
评论

相关推荐

    我的通用DAO理解.rar

    在这个"我的通用DAO理解"的资源中,我们可以看到作者提供了一个封装了数据库操作的DAO实现,这通常包括增删查改等基本功能,对于Java开发者来说,这是一个非常实用的工具或学习案例。 首先,让我们详细了解一下DAO...

    hibernate4 通用dao,service

    而Service层则在此基础上进行业务逻辑处理,调用DAO方法来执行数据库操作,并可能包含事务管理、异常处理等高级功能。 描述中的链接指向了一个博客文章,虽然没有提供具体内容,但根据标题可以推测,这篇文章可能...

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

    使用泛型通用DAO的好处包括: 1. 代码重用:一个泛型DAO接口或抽象类可以应用于所有数据实体,减少了大量重复代码。 2. 类型安全:编译时类型检查确保了操作的正确性,避免了强制类型转换错误。 3. 易于扩展:如果...

    Hibernate通用Dao设计。

    本篇文章将深入探讨Hibernate的通用Dao设计,帮助开发者理解如何利用Hibernate提高代码复用性和可维护性。 在传统的Java应用程序中,DAO(Data Access Object)层是用于封装数据库访问逻辑的地方,它隔离了业务逻辑...

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

    在Java中,DAO通常负责与数据库的交互,包括CRUD(创建、读取、更新、删除)操作。 最后,“IBaseDao.java”可能是`BaseDao`的接口定义,它声明了一些通用的DAO操作,如`save`, `findById`等,以便于子类实现或继承...

    通用DAO

    实现通用DAO的关键步骤包括: 1. **创建泛型DAO接口**:定义一个泛型接口,如`GenericDAO&lt;T&gt;`,其中T代表数据库实体类型。 2. **实现DAO接口**:在实现类中,使用反射获取实体类的字段信息,构造SQL语句。 3. **...

    java ssh通用DAO另类实现示例

    2. 创建一个`HibernateDAO`类,作为所有实体的通用DAO实现,包含与数据库交互的通用逻辑。 ```java public class HibernateDAO&lt;T&gt; { private SessionFactory sessionFactory; public HibernateDAO...

    Hibernate 原生通用DAO

    在设计原生通用DAO时,通常会包含以下核心功能: 1. **Session管理**:DAO层会负责处理SessionFactory的创建和关闭,以及Session的打开和关闭,确保数据库事务的正确进行。 2. **事务处理**:通过SessionFactory的...

    ssm(Spring-springMVC-Mybatis)通用Dao框架

    SSM(Spring-SpringMVC-Mybatis)通用Dao框架是一个常见的Java Web开发架构,它整合了Spring、SpringMVC和Mybatis三个强大的开源框架,为开发者提供了便捷的数据访问和业务逻辑处理能力。这个框架的使用可以显著提高...

    C#特性标签实现通用Dao层

    在C#编程中,"通用Dao层"是一个常见的设计模式,用于封装数据库操作,使得业务逻辑层能够专注于处理业务规则,而无需关心底层数据访问的细节。本篇将重点探讨如何利用C#的特性(Attribute)标签来实现这一目标,同时...

    JDBCTemplate+JavaPOJO实现通用DAO

    3. **编写通用DAO接口**:定义一个基类,如`BaseDAO&lt;T&gt;`,T代表POJO类型,接口中包含增删改查的基本方法。 4. **实现通用DAO接口**:实现`BaseDAO&lt;T&gt;`接口,使用JDBCTemplate的方法来执行SQL。例如,实现插入操作:...

    高仿JPA自定义通用DAO

    自定义通用DAO实现基本的CRUD,比如: public interface BaseDao&lt;T&gt; { int insert(T obj) throws Exception; int update(T obj) throws Exception; int deleteByPrimaryKey(Object key) throws Exception; int ...

    Hibernate_通用DAO模式,一个写好的dao层

    文件名“Hibernate_app03_通用DAO模式”可能表示这是一个迭代版本的应用,可能包含了一些优化或者新功能。在实际应用中,除了基本的DAO操作,还可能扩展了分页查询、事务管理、缓存支持等功能,以满足更复杂的需求。...

    通用数据库访问模块,通用DAO类

    6. **异常处理**:DAO 类通常包含异常处理代码,以捕获并适当地处理数据库操作期间可能出现的问题,如连接丢失、SQL 错误等。 在给定的“generalDAO”压缩包中,可能包含了一个或多个通用 DAO 类的实现,这些类可能...

    JDBC_DAO设计思想与搭建骨架, 结合Service层讲解DAO层的异常处理

    // 记录日志,处理异常 log.error("添加用户失败", e); throw new ServiceException("添加用户时发生错误"); } } public User getUserById(int id) { try { return userDAO.getUserById(id); } catch ...

    SSH中通用dao类

    5. **异常处理**:在通用DAO中,通常会统一捕获并封装数据库操作中的异常,如`DataAccessException`,并向上抛出更具体的业务异常,以便服务层进行适当的错误处理和反馈。 6. **性能优化**:为了提高性能,通用DAO...

    Hibernate的通用dao

    1. **异常处理**:在实现通用DAO时,需要妥善处理可能出现的数据库异常,如`ConstraintViolationException`,`ObjectNotFoundException`等。 2. **事务管理**:数据库操作通常涉及事务,需要确保事务的一致性和原子...

    J2EE项目中统一异常处理源码

    一个良好的异常处理机制能够提供详细的错误信息,帮助开发者快速定位问题,并且可以在生产环境中优雅地处理异常,防止用户看到不必要的技术细节。"J2EE项目中统一异常处理源码"的实践就是为了解决这些问题,通过...

    JAVA_DAO 事务界定 异常处理,日志记录

    ### JAVA DAO 事务界定、异常处理与日志记录 #### 一、引言 在现代软件开发中,尤其是在企业级应用领域,数据访问对象(Data Access Object,简称 DAO)模式是一种广泛采用的设计模式,用于将低级别的数据访问逻辑...

    Hibernate通用Dao

    通用dao,简单全面,所有dao都可以继承这个dao.

Global site tag (gtag.js) - Google Analytics