HibernateTemplate源代码
### HibernateTemplate源代码解析 #### 一、简介 `HibernateTemplate`是Spring框架中的一个类,位于`org.springframework.orm.hibernate3`包下。它提供了一系列简化Hibernate数据访问操作的方法,并且能够自动将Hibernate异常转换为Spring的数据访问异常体系中的异常。`HibernateTemplate`通过其核心方法`execute`支持Hibernate访问代码的实现,该方法接受一个实现了`HibernateCallback`接口的匿名内部类或Lambda表达式。 #### 二、类结构与继承关系 `HibernateTemplate`类本身并没有直接继承自任何特定类,但它是Spring框架中众多DAO支持类之一。这些类通常用于处理数据访问异常以及资源管理等任务。`HibernateTemplate`主要依赖于`SessionFactory`来创建和管理Hibernate会话。 #### 三、核心方法解析 - **execute**:这是`HibernateTemplate`的核心方法,它执行由`HibernateCallback`接口定义的数据访问操作,并将Hibernate抛出的异常转换为Spring的数据访问异常。 ```java public <T> T execute(HibernateCallback<T> action) throws DataAccessException { Assert.notNull(action, "Callback object must not be null"); SessionFactory sessionFactory = getSessionFactory(); if (sessionFactory == null) { throw new InvalidDataAccessApiUsageException("SessionFactory required for HibernateTemplate"); } // 获取当前会话 Session session = sessionFactory.getCurrentSession(); // 设置会话配置 configureSession(session); // 执行回调操作 try { return action.doInHibernate(session); } catch (HibernateException ex) { // 处理Hibernate异常 throw convertHibernateAccessException(ex); } } ``` - **getSessionFactory**:此方法返回当前使用的`SessionFactory`实例,这是`HibernateTemplate`进行数据访问操作的基础。 - **configureSession**:此方法允许对Hibernate会话进行额外的配置,如设置flush模式等。 - **convertHibernateAccessException**:此方法负责将Hibernate异常转换为Spring的`DataAccessException`。 #### 四、异常处理 `HibernateTemplate`提供了一种统一的异常处理机制,可以将Hibernate抛出的各种异常转换为Spring的`DataAccessException`异常层次结构中的异常。这有助于应用程序以一致的方式处理所有数据访问异常。 ```java protected DataAccessException convertHibernateAccessException(HibernateException ex) { // 省略具体实现 } ``` #### 五、其他重要方法 - **find**:执行简单的查询操作。 - **bulkUpdate**:执行批量更新操作。 - **get**/`load`:根据主键获取对象。 - **saveOrUpdate**:保存或更新对象。 - **delete**:删除对象。 #### 六、使用示例 下面是一个简单的使用示例: ```java // 创建HibernateTemplate实例 HibernateTemplate hibernateTemplate = new HibernateTemplate(sessionFactory); // 执行查询操作 List<User> users = hibernateTemplate.find("from User"); // 执行保存操作 User user = new User(); user.setName("张三"); hibernateTemplate.save(user); ``` #### 七、总结 `HibernateTemplate`是Spring框架提供的一个强大的工具,它不仅简化了Hibernate的使用,还提供了异常转换、资源管理等功能,使得开发人员能够更加专注于业务逻辑的编写。通过对`HibernateTemplate`的学习和使用,可以大大提高基于Hibernate的数据访问层的开发效率和质量。
2. * Copyright 2002-2009 the original author or authors.
3. *
4. * Licensed under the Apache License, Version 2.0 (the "License");
5. * you may not use this file except in compliance with the License.
6. * You may obtain a copy of the License at
7. *
8. * http://www.apache.org/licenses/LICENSE-2.0
9. *
10. * Unless required by applicable law or agreed to in writing, software
11. * distributed under the License is distributed on an "AS IS" BASIS,
12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13. * See the License for the specific language governing permissions and
14. * limitations under the License.
15. */
16.
17.package org.springframework.orm.hibernate3;
18.
19.import java.io.Serializable;
20.import java.lang.reflect.InvocationHandler;
21.import java.lang.reflect.InvocationTargetException;
22.import java.lang.reflect.Method;
23.import java.lang.reflect.Proxy;
24.import java.sql.SQLException;
25.import java.util.Collection;
26.import java.util.Iterator;
27.import java.util.List;
28.
29.import org.hibernate.Criteria;
30.import org.hibernate.Filter;
32.import org.hibernate.Hibernate;
33.import org.hibernate.HibernateException;
34.import org.hibernate.LockMode;
35.import org.hibernate.Query;
36.import org.hibernate.ReplicationMode;
37.import org.hibernate.Session;
38.import org.hibernate.SessionFactory;
39.import org.hibernate.criterion.DetachedCriteria;
40.import org.hibernate.criterion.Example;
41.import org.hibernate.engine.SessionImplementor;
42.import org.hibernate.event.EventSource;
43.
44.import org.springframework.dao.DataAccessException;
45.import org.springframework.dao.DataAccessResourceFailureException;
46.import org.springframework.dao.InvalidDataAccessApiUsageException;
47.import org.springframework.util.Assert;
48.
49./**
50. * Helper class that simplifies Hibernate data access code. Automatically
51. * converts HibernateExceptions into DataAccessExceptions, following the
52. * <code>org.springframework.dao</code> exception hierarchy.
53. *
54. * <p>The central method is <code>execute</code>, supporting Hibernate access code
55. * implementing the {@link HibernateCallback} interface. It provides Hibernate Session
56. * handling such that neither the HibernateCallback implementation nor the calling
57. * code needs to explicitly care about retrieving/closing Hibernate Sessions,
58. * or handling Session lifecycle exceptions. For typical single step actions,
59. * there are various convenience methods (find, load, saveOrUpdate, delete).
60. *
剩余43页未读,继续阅读
- 粉丝: 11
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 适用于 Java 的 Chef 食谱.zip
- Simulink仿真快速入门与实践基础教程
- js-leetcode题解之179-largest-number.js
- js-leetcode题解之174-dungeon-game.js
- Matlab工具箱使用与实践基础教程
- js-leetcode题解之173-binary-search-tree-iterator.js
- js-leetcode题解之172-factorial-trailing-zeroes.js
- js-leetcode题解之171-excel-sheet-column-number.js
- 安卓开发从入门到精通基础教程
- js-leetcode题解之170-two-sum-iii-data-structure-design.js
- 1
- 2
- 3
前往页