Spring+HIbernate通用层Dao和Service实现

本文介绍了一种Spring+Hibernate环境下通用Dao和Service的实现方式,通过创建BaseDao和BaseServiceImpl,实现了对常见CRUD操作的抽象,其他特定Dao和Service只需继承和扩展这些基类,减少了重复代码。示例中展示了CustomerDao、OrderDao以及对应的Service如何实现,同时也提到了在使用过程中可能遇到的异常及其解决方案。
摘要由CSDN通过智能技术生成

因为DAO层基本的就是CRUD操作,变化不是很大,要是有变化的那就是查询。而确实没有必要为每一个实体写一个完整的DAO,但是没有还不行,那就“抽取”出来吧。而Service依赖与DAO层,有时就是简单调用一下,也确实没有必要每个都写。总之,不爱写多个,那就写一个通用的,而其他的继承或实现这个通用的可以了。

还是用代码说话吧。

Java代码   收藏代码
  1. package org.monday.dao;  
  2.   
  3. import java.io.Serializable;  
  4. import java.util.List;  
  5.   
  6. /** 
  7.  * BaseDAO 定义DAO的通用操作 
  8.  *  
  9.  * @author Monday 
  10.  */  
  11. public interface BaseDao<T> {  
  12.   
  13.     public void save(T entity);  
  14.   
  15.     public void update(T entity);  
  16.   
  17.     public void delete(Serializable id);  
  18.   
  19.     public T findById(Serializable id);  
  20.   
  21.     public List<T> findByHQL(String hql, Object... params);  
  22.   
  23. }  

 

 

上面的DAO只定义了一些常见的方法,有需要通用的方法,可以随便加,然后实现它就行了。 

Java代码   收藏代码
  1. package org.monday.dao.impl;  
  2.   
  3. import java.io.Serializable;  
  4. import java.lang.reflect.ParameterizedType;  
  5. import java.util.List;  
  6.   
  7. import javax.annotation.Resource;  
  8.   
  9. import org.hibernate.Query;  
  10. import org.hibernate.Session;  
  11. import org.hibernate.SessionFactory;  
  12. import org.monday.dao.BaseDao;  
  13.   
  14. /** 
  15.  * BaseDaoImpl 定义DAO的通用操作的实现 
  16.  *  
  17.  * @author Monday 
  18.  */  
  19. @SuppressWarnings("unchecked")  
  20. public class BaseDaoImpl<T> implements BaseDao<T> {  
  21.   
  22.     private Class<T> clazz;  
  23.   
  24.     /** 
  25.      * 通过构造方法指定DAO的具体实现类 
  26.      */  
  27.     public BaseDaoImpl() {  
  28.         ParameterizedType type = (ParameterizedType) this.getClass().getGenericSuperclass();  
  29.         clazz = (Class<T>) type.getActualTypeArguments()[0];  
  30.         System.out.println("DAO的真实实现类是:" + this.clazz.getName());  
  31.     }  
  32.   
  33.     /** 
  34.      * 向DAO层注入SessionFactory 
  35.      */  
  36.     @Resource  
  37.     private SessionFactory sessionFactory;  
  38.   
  39.     /** 
  40.      * 获取当前工作的Session 
  41.      */  
  42.     protected Session getSession() {  
  43.         return this.sessionFactory.getCurrentSession();  
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值