我的智囊团(SSH)01--07学习笔记

preview
需积分: 0 6 下载量 189 浏览量 更新于2009-12-02 收藏 31KB DOC 举报
在本文中,我们将深入探讨`HibernateTemplate`在SSH(Struts、Spring、Hibernate)架构中的应用,以及如何使用它来执行常见的数据访问操作。SSH是一种流行的企业级Java应用程序开发框架,其中Spring框架提供了`HibernateTemplate`作为简化Hibernate操作的工具。 `HibernateTemplate`是Spring对Hibernate ORM框架的一个封装,它提供了一组方便的方法,使得在处理数据库操作时无需直接与`Session`对象交互。这些方法包括对实体的增删改查(CRUD)操作,以及支持命名查询和分页功能。以下是`HibernateTemplate`的一些关键方法: 1. **删除操作**: - `void delete(Object entity)`:删除给定的持久化实例。 - `deleteAll(Collection entities)`:删除集合中所有持久化类实例。 2. **查询操作**: - `List find(String queryString)`:根据HQL(Hibernate查询语言)字符串返回实例集合。 - `List findByNamedQuery(String queryName)`:根据预先定义的命名查询返回实例集合。 3. **加载与保存操作**: - `Object get(Class entityClass, Serializable id)`:通过主键加载特定持久化类的实例。 - `void save(Object entity)`:保存新的实例到数据库。 - `void saveOrUpdate(Object entity)`:根据实例状态决定是保存还是更新。 - `void update(Object entity)`:更新已存在的持久化实例,但要求该实例处于持久状态。 4. **分页支持**: - `void setMaxResults(int maxResults)`:设置查询结果的最大数量,用于实现分页。 在实际的DAO(数据访问对象)类中,我们可以看到如何集成`HibernateTemplate`。例如,以下是一个`PersonDAOHibernate`类的示例,它实现了`PersonDAO`接口: ```java public class PersonDAOHibernate implements PersonDAO { private static Log log = LogFactory.getLog(PersonDAOHibernate.class); private SessionFactory sessionFactory; private HibernateTemplate hibernateTemplate; public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } public HibernateTemplate getHibernateTemplate() { if (hibernateTemplate == null) { hibernateTemplate = new HibernateTemplate(sessionFactory); } return hibernateTemplate; } public List<Person> getPersons() { return getHibernateTemplate().find("from Person"); } public Person getPerson(int personId) { return (Person) getHibernateTemplate().get(Person.class, new Integer(personId)); } public void savePerson(Person person) { getHibernateTemplate().saveOrUpdate(person); } // 其他类似的方法... } ``` 在这个例子中,`PersonDAOHibernate`类通过`setSessionFactory`方法接收`SessionFactory`实例,然后在需要时创建`HibernateTemplate`对象。`getHibernateTemplate`方法确保了每次只有一个`HibernateTemplate`实例,避免了多次实例化。DAO类中的其他方法如`getPersons()`、`getPerson()`和`savePerson()`则直接调用`HibernateTemplate`的相应方法来执行数据库操作。 使用`HibernateTemplate`的好处在于它自动处理了事务管理、异常转换和资源关闭等细节,使开发者能更专注于业务逻辑,而不是底层数据访问层的实现。此外,由于`HibernateTemplate`是Spring的一部分,它很好地融入了Spring的依赖注入和AOP(面向切面编程)特性,使得整个应用的维护和扩展更为便捷。 总结来说,`HibernateTemplate`是SSH框架中一个非常实用的工具,它简化了Hibernate的使用,提供了对常见数据库操作的便捷支持,并且与Spring的其他功能紧密集成,提升了整体的开发效率和代码质量。