`
tianke66
  • 浏览: 187941 次
  • 性别: Icon_minigender_1
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

使用HibernateTemplate

阅读更多

使用HibernateTemplate
HibernateTemplate 可将Hibernate 的持久层访问模板化,使用HibernateTemplate 非常简单。创建Hi bernateTemplate 实例后,注入一个SessionFactory 的引用,就可执行持久化操作。SessionFactoyr 对象可通过构造参数传入,或通过设值方式传入。例如:
//获取Spring 上下文
ApplicationContext ctx = new FileSystemXmlApplicationContext("bean.xml");
//通过上下文获得SessionFactory
SessionFactory sessionFactory = (SessionFactory) ctx.getBean("sessionFactory") ,
HibernateTemplate 提供如下三个构造函数:
• HibernateTemplateO 。
• HibernateTemplate(org.hibernate.SessionFactory sessionFactory)。
• HibernateTemplate(org.hibernate.SessionFactory sessionFactory, boolean allowCreate) 。 

第一个构造函数:构造一个默认的HibernateTemplate 实例,因此,使用HibernateTemplate实例之前,还必须使用方法setSessionFactory(SessionFactory sessionFactory)来为HibernateTemplate 传入SessionFactory 的引用。
第二个构造函数:在构造时已经传入SessionFactory 引用。
第三个构造函数:其boolean 型参数表明,如果当前线程己经存在一个非事务性的Session ,是否直接返回此非事务性的Session 。
对于在Web 应用中,通常启动时自动加载ApplicationContext , SessionFactory 和DAD对象都处在Spring 上下文管理下。因此无须在代码中显式设置,可采用依赖注入解耦SessionFactory 和DAO.

 其依赖关系可通过配置文件来设置

<?xml version="1.0" encoding="gb2312"?>
<!--Spring 配置文件的DTD 定义二〉
<!DOCTYPE beans PUBLIC "-!!SPRING!!DTD BEAN!!EN"  ''http://www.springframework.org/dtd/spring-beans.dtd''>
    <! -- Spring 配置文件的根元素是beans
-->
    
<beans>
        
<!--定义数据源,该bean 的ID 为dataSource-->
        
<bean id=" dataSource" class=" org. springframework.jdbc. datasource. DriverManagerDataSource">
        
<!-- 指定数据库驱动-->
        
<property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
        
<!-- 指定连接数据库的URL-->
        
<property name="url"><value>jdbc:mysql://wonder:3306/j2ee</ value>
        
<!property>
        
<!-- root 为数据库的用户名-->
        
<property name="username"><value>root</value></property>
        
<!--pass 为数据库密码-->
        
<property name= "password" ><value>pass</value></property>
    
</bean>
    
<!--定义Hibernate 的SessionFactoy-->
    
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        
<!--依赖注入数据源,注入正是上文定义的dataSource-->
        
<property name="dataSource"><ref local="dataSource"/></property>
        
<!--mappingResouces属性用来列出全部映射文件〉
        <property name="mappingResources">
            <list>
                <!--以下用来列出所有的PO 映射文件
-->
                
<value>lee/Person.hbm.xml</value>
            
</list>
        
</property>
        
<!--定义Hibernate 的SessionFactory的属性-->
        
<property name="hibernateProperties">
            
<props>
                
<!-- 指定Hibernate 的连接方言-->
                
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                
<!--不同数据库连接,启动时选择create , update , create-drop-->
                
<prop key="hibernate.hbm2ddl.auto">update</prop>
            
</props>
    
</property>
    
</bean>
    
<!--配置Person 持久化类的DAO bean-->
    
<bean id="personDao" class="lee.PersonDaoImpl">
        
<!--采用依赖注入来传入SessionFactory的引用〉
        <property name="sessionFactory"><ref local="sessionFactory"/></property>
    </bean>
</beans>

 

在DAO 实现类中,可采用更简单的方式来取得HibemateTemplate的实例。代码如下:

public class PersonDaoImpl implements PersonDao
...{
    
// 执行持久化操作的HibernateTemplate
    HibernateTemplate ht;
    
private SessionFactory sessionFactory;
    
//依赖注入Sess工onFactory 的必需的setter 方法
    public void setSessionFactory(SessionFactory sessionFactory)
    
...{
        
this.sessionFactory = sessionFactory;
    }

    
//该方法用于完成HibernateTemplate的初始化
    private void setHibernateTemplate()    
    
...{
        
if (ht ==null)...{
            ht 
= new HibernateTemplate(sessionFactory);
        }

    }

    
/** *//**
    *加载Person 实例
    * 
@param id 需要加载Person 实例的主键值
    * 
@return 返回加载的Person 实例
    
*/

    
public Person get(int id)...{
        setHibernateTemplate();
        
return (Person)ht.get(Person.class , new Integer(id));
    }

    
/** *//**
    *保存Person 实例
    * 
@param person 需要保存的Person 实例
    
*/

    
public void save(Person person)...{
        setHibernateTemplate() ;
        ht.save(person) ;
    }

    
/** *//**
    *修改Person 实例
    * 
@param person 需要修改的Person 实例
    
*/

    
public void update(Person person)...{
        setHibernateTemplate();
        ht.update(person);
    }

    
/** *//**
    *删除Person 实例
    * 
@param id 需要删除的Person id
    
*/

    
public void delete(int id)...{
        setHibernateTemplate();
        ht.delete(ht.get(Person.
class , new Integer(id)));
    }

    
/** *//**
    *删除Person 实例
    * 
@param perso口需要删除的Person 实例
    
*/

    
public void delete(Person person)...{
        setHibernateTemplate();
        ht.delete(person) ;
    }

    
/** *//**
    *根据用户名查找Person
    * 
@param name 用户名
    * 
@return 用户名对应的全部用户
    
*/

    
public List findByPerson(String name)...{
        setHibernateTemplate();
        
return h t. find("from Person p where p.name like ?" , name);
    }

    
/** *//**
    *返回全部的Person 实例
    * 
@return 全部的Person 实例
    
*/

    
public List findAllPerson()...{
        setHibernateTemplate();
        
return ht.find("from Person ");
    }

}
分享到:
评论
1 楼 ppboyhai 2010-12-23  
你好,我是HibernateTemplate 初学者,在我敲代码的过程中发现:System.out.println(this.getHibernateTemplate()); 打印结果为null ,这是为什么呢?
我纠结了好久都找不出原因

相关推荐

    关于使用HibernateTemplate

    ### 关于使用HibernateTemplate #### 一、简介与背景 在Java企业级应用开发中,持久层技术扮演着至关重要的角色。其中,Hibernate作为一款优秀的ORM(Object Relational Mapping)框架,极大地简化了数据访问层的...

    SSH2增删改查使用HibernateTemplate

    在这个框架中,HibernateTemplate是Spring提供的一个工具类,它简化了Hibernate的使用,使得开发者可以更方便地进行数据库操作,如增删改查。接下来,我们将深入探讨如何在SSH2中使用HibernateTemplate进行这些基本...

    HibernateTemplate 的常规用法.doc

    在实际应用中,DAO(Data Access Object)类通常会使用HibernateTemplate。例如,以下是一个简单的`PersonDAOImpl`类的示例: ```java public class PersonDAOImpl implements PersonDAO { private static Log log...

    HibernateTemplate的用法总结

    HibernateTemplate是Spring框架提供的一种操作Hibernate的方式,它简化了Hibernate的使用过程,使开发者无需关注Session的管理与事务控制,极大地提高了开发效率。本文将对HibernateTemplate的主要用法进行详细介绍...

    HibernateTemplate的方法使用

    ### HibernateTemplate 的方法使用 #### 一、简介与配置方式 **HibernateTemplate** 是 Spring 框架中用于简化 Hibernate 使用的一个工具类。它通过 AOP(面向切面编程)的思想,封装了大量的 CRUD(创建、读取、...

    HibernateTemplate类的使用

    ### HibernateTemplate类的使用详解 #### 一、引言 在Java开发中,持久层框架Hibernate因其优秀的ORM(Object-Relational Mapping)特性被广泛应用。为了更便捷地使用Hibernate,Spring框架提供了一系列工具类来简化...

    一个模拟Spring将SessionFactory注入到HibernateTemplate的小例子

    本示例将深入探讨如何使用Spring将SessionFactory注入到HibernateTemplate中,从而实现数据库操作的便捷管理。 首先,让我们了解几个关键组件: 1. SessionFactory:这是Hibernate的核心工厂类,用于创建Session...

    Spring_Spring_Hibernate_HibernateTemplate

    - 创建HibernateTemplate实例:使用SessionFactory创建HibernateTemplate,通常通过`setSessionFactory()`方法注入SessionFactory。 - 编写业务逻辑:调用HibernateTemplate提供的方法,如`save()`, `update()`, `...

    对hibernate的封装 HibernateTemplate

    在使用HibernateTemplate之前,需要配置SessionFactory,并将其注入到HibernateTemplate实例中。以下是一个简单的例子: ```java @Autowired private HibernateTemplate hibernateTemplate; public void saveUser...

    HibernateTemplate详细描述以及使用范围

    ### HibernateTemplate 的详细介绍与使用范围 #### 一、概述 在Spring框架中,`HibernateTemplate`作为ORM(Object Relational Mapping)技术中的一个重要组件,它提供了简化Hibernate操作的方法集,使得开发人员...

    HibernateTemplate及generator用法.docx

    首先,我们来看如何在DAO中使用HibernateTemplate。通常,DAO类会继承HibernateDaoSupport,这个抽象类提供了对HibernateTemplate的便捷访问。在SSH或SSH2中,你可以通过以下两种方式调用Hibernate的相关操作: 1. ...

    Spring_2000_Spring_Hibernate_HibernateTemplate

    在这个主题下,我们将深入探讨Spring框架的核心特性,以及如何与Hibernate进行集成,特别是使用HibernateTemplate作为数据访问对象(DAO)层的工具。 **Spring框架** Spring是Java平台上广泛使用的开源框架,起源于...

    Spring整合hibernate(2)之基于HibernateTemplate的整合

    四、使用HibernateTemplate 1. 依赖注入 在需要操作数据库的Service层,通过@Autowired注解注入HibernateTemplate实例。 ```java @Autowired private HibernateTemplate hibernateTemplate; ``` 2. 常见操作 现在...

    hibernateTemplate和HibernateDaoSupport

    这样,DAO 类可以直接使用 HibernateTemplate 进行数据库操作。 2. `public final void setSessionFactory(SessionFactory sessionFactory)`: 用于接收 Spring 应用上下文(ApplicationContext)的依赖注入。开发者...

    S2SH购物车+HibernateTemplate分页

    在本项目中,Spring管理SessionFactory、Service、DAO等对象,实现事务控制,并使用HibernateTemplate进行数据库操作。 【Hibernate框架】 Hibernate是一个强大的ORM(Object-Relational Mapping,对象关系映射)...

    HibernateTemplate.saveOrUpdate时出现\xE7\x84十六进制之类的字符串

    在使用HibernateTemplate的saveOrUpdate方法时,如果遇到类似`\xE7\x84`这样的十六进制字符串,通常这是由于字符编码不匹配导致的汉字乱码问题。这个问题主要涉及到数据库的字符集设置、应用程序的编码配置以及数据...

    hibernateTemplate的常用方法

    通过上述介绍,我们可以看到`HibernateTemplate`的强大之处在于它不仅简化了Hibernate的集成与使用,还提供了一系列实用的方法来满足不同的业务需求。在实际项目开发中,合理利用这些方法可以大大提升开发效率和代码...

    hibernateTemplate

    使用`HibernateTemplate`可以减少大量模板代码的编写,提高开发效率。 #### 三、HibernateTemplate核心功能详解 ##### 1. 增删改查基础操作 `HibernateTemplate`提供了多种方法来执行基本的数据库操作: - **...

    HibernateTemplate汇总

    HibernateTemplate 是 Spring 框架中的一個关键组件,用于简化 Hibernate 的使用,提供了許多实用的方法来进行数据库操作。在本文中,我们将对 HibernateTemplate 的主要方法进行总结和解释。 ...

    Spring+Hibernate实现增删改查的两种方法

    使用HibernateTemplate时,你需要继承Spring的HibernateDaoSupport类,并注入HibernateTemplate实例。 1. **配置HibernateTemplate** 首先,要在Spring配置文件中声明并配置HibernateTemplate,设置SessionFactory...

Global site tag (gtag.js) - Google Analytics