[原创]使用Spring的HibernateDaoSupport实现BaseDaoImpl类

文章详细介绍了如何通过引入BaseDao接口和实现类BaseDaoImpl来解决项目代码结构混乱、重复代码过多的问题。主要内容包括定义BaseDao接口、实现类继承并注入SessionFactory、配置SessionFactory、实现通用方法如save、findById等,以及子类实现重写关键方法。此方法有助于提升代码复用性和维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

公司要做一个新的小项目,之前的项目代码结构不够好,没有用注解,没有BaseDao接口,导致每一个模块都有大量的重复代码.为了解决这个问题,我写了BaseDao接口和它的实现类BaseDaoImpl.其中核心的代码是整合框架以及通用方法的实现.

  1. 定义BaseDao接口.

  2. 定义BaseDaoImpl类,实现BaseDao,继承org.springframework.orm.hibernate3.support.HibernateDaoSupport.在类上方添加注解Repository以供扫描.
  3. Spring的xml配置文件中注入sessionFactory

         <bean id="sessionFactory"
             class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
             <property name="configLocation">
                 <value>classpath:hibernate.cfg.xml</value>
             </property>
         </bean>
  4. BaseDaoImpl.java中添加一个方法,以注入sessionFactory对象.

         @Resource(name = "sessionFactory")
         public void setSuperHibernateTemplate(SessionFactory sessionFactory) {
             super.setSessionFactory(sessionFactory);
         }
  5. 配置完成.添加一些通用方法进去

         @SuppressWarnings("unchecked")
         public PK save(E newInstance) {
             return (PK) getHibernateTemplate().save(newInstance);
         }
    
         public E findById(PK id) {
             return (E) getHibernateTemplate().get(getEntityClass(), id);
         }
    
         @SuppressWarnings("unchecked")
         public List<E> findAll() {
             return getHibernateTemplate().findByCriteria(createDetachedCriteria());
         }
    
         @SuppressWarnings("unchecked")
         public List<E> findAllByProperty(String propertyName, Object value) {
             DetachedCriteria criteria = createDetachedCriteria();
             criteria.add(Restrictions.eq(propertyName, value));
             return getHibernateTemplate().findByCriteria(criteria);
         }
    
         public List<E> findByExample(E object) {
             @SuppressWarnings("unchecked")
             List<E> resultList = getHibernateTemplate().findByExample(object, 0, 1);
             return resultList;
         }
    
         public List<E> findByExample(E object, int firstResult, int maxResults) {
             @SuppressWarnings("unchecked")
             List<E> resultList = getHibernateTemplate().findByExample(object, firstResult, maxResults);
             return resultList;
         }
    
         public void update(E transientObject) {
             getHibernateTemplate().update(transientObject);
         }
    
         public void saveOrUpdate(E transientObject) {
             getHibernateTemplate().saveOrUpdate(transientObject);
         }
    
         public void delete(E persistentObject) {
             getHibernateTemplate().delete(persistentObject);
         }
    
         protected abstract Class<E> getEntityClass();
    
         protected DetachedCriteria createDetachedCriteria() {
             return DetachedCriteria.forClass(getEntityClass());
         }
    
         @SuppressWarnings("unchecked")
         public List<E> findByHQL(String hql, Object... params) {
             return getHibernateTemplate().find(hql, params);
         }
  6. 子类的实现,重写getEntityClass()方法

     public class CollectPubDAOImpl extends BaseDaoImpl<CollectPoint, Integer> implements CollectPubDAO{
    
         protected Class<CollectPoint> getEntityClass() {
             return CollectPoint.class;
         }
     }
  7. That's all.Happy coding.

转载于:https://www.cnblogs.com/wlb-cs/p/4598205.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值