首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Spring 入門(十二):Spring 整合 Hibernate 實現 CRUD——繼承 HibernateDaoSupport 簡化開發

     編輯:Java 相關知識

背景

承接上篇「封裝 HibernateTemplate」,本篇展示通過繼承 HibernateDaoSupport 進一步簡化 DAO 開發,無需手動注入 template。

核心變更

  • UserDaoImpl 繼承 HibernateDaoSupport
  • 直接調用 getHibernateTemplate() 獲得模板
  • Spring 配置中聲明父 Bean 注入 template

代碼實現

DAO 實現類

package www.csdn.spring.hibernate.dao.copy;

import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import www.csdn.spring.hibernate.domain.Users;

public class UsersDaoImpl extends HibernateDaoSupport implements UsersDao {
    @Override
    public void save(Users entity) {
        getHibernateTemplate().save(entity);
    }

    @Override
    public List getObjects(Class clazz) {
        return getHibernateTemplate().find("from " + clazz.getName());
    }

    @Override
    public void deleteById(Class clazz, Integer id) {
        // 批量刪除 HQL
        getHibernateTemplate().bulkUpdate("delete from " + clazz.getName() + " where id=" + id);
    }

    @Override
    public void update(Users entity) {
        getHibernateTemplate().update(entity);
    }
}

Spring 配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="https://www.springframework.org/schema/beans"
       xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="https://www.springframework.org/schema/beans
       https://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- 抽象父 Bean,注入 hibernateTemplate -->
    <bean id="hibernateDaoSupport" class="org.springframework.orm.hibernate3.support.HibernateDaoSupport" abstract="true">
        <property name="hibernateTemplate" ref="hibernateTemplate"/>
    </bean>

    <!-- 實際 DAO 繼承父 Bean,自動獲得 template -->
    <bean id="usersDaoImpl" class="www.csdn.spring.hibernate.dao.copy.UsersDaoImpl" parent="hibernateDaoSupport">
    </bean>

</beans>

優勢對比

方式代碼量耦合度推薦場景
手動注入 HibernateTemplate需 setter + XML property依賴具體模板類早期版本、需精細控制
繼承 HibernateDaoSupport零配置繼承,直接用 getHibernateTemplate()依賴基類,但更簡潔標準 CRUD、快速開發
現代 @Repository + @Autowired SessionFactory註解驅動,無 XML最低,面向接口Spring 3.1+、Hibernate 4+ 項目

注意事項

  • HibernateDaoSupport 屬於 org.springframework.orm.hibernate3 包,對應 Hibernate 3.x。Hibernate 4/5 建議直接注入 SessionFactory 使用 getCurrentSession()。
  • 批量操作用 bulkUpdate 執行 HQL DML,效率高於逐條加載刪除。
  • 父 Bean 設置 abstract="true" 防止被實例化為獨立 Bean。

掌握三種 DAO 寫法演進,理解 Spring 對模板模式的封裝演進,可根據項目版本靈活選擇最優方案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved