`
dengchangqing
  • 浏览: 53306 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Hibernate的复杂用法HibernateCallback操作数据库

阅读更多
  HibernateTemplate提供了非常多的常用方法来完成数据库的基本操作,使得持久层访问摸板化,只要创建HibernateTemplate实例后,注入一个SessionFactory的引用就可以了.无须手动创建sessionFactory,更加智能的管理Hibernate 的Session,没有大量的try/catch操作,

  void delete(Object entity)删除指定持久化实例
  deleteAll(Collection entities)删除集合内全部持久化实例
  find(String queryString)根据HQL查询字符串返回实例集合
  findByNamedQuery(Striing QueryName)根据命名查询返回实例集合
  Get(Class entityClass,Serializable id)割据主键加载特定持久化类的实例
  save(Object entity)保存实例
  saveOrUpdate(Object entity)根据实例状态,选择保存或者更新
  update(Object entity)更新实例的状态
  setMaxResults(int maxResults)设置分页大小
HIbernate的复杂用法HibernateCallback提供了灵活方式来操作数据库,Object execute(HibernateCallback action)和List execute(HibernateCallback action)这两个方法都需要一个HibernateCallback的实例,实例可在任何有效的hibernate数据访问中使用.
import java.util.Collection;
import java.util.List;

import org.hibernate.SessionFactory;
import org.hibernate.HibernateException;
import org.hibernate.Session;

import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.HibernateCallback;

//完全可以不需要MyTestDao接口,直接使用类,但这样是面向接口的编程。
public class MyTestDaoImpl implements MyTestDao
{

    private SessionFactory sessionFactory;

    public void setSessionFactory(SessionFactory sessionFactory)
	{
        this.sessionFactory = sessionFactory;
    }

    public Collection findAllMyTest()
	{
        HibernateTemplate hibernateTemplate = new HibernateTemplate(this.sessionFactory);

        /*
		  HibernateCallback的内部类方式可在任何Hibernate数据访问中使用
		  对于简单的一步操作,如简单的load,savaOrUpdate则不必使用这种HibernateCallback匿名内部类的方式
		*/
		return (Collection) hibernateTemplate.execute( new HibernateCallback()
			{
                public Object doInHibernate(Session session) throws HibernateException
				{
                    List result = session.createQuery("from MyTest")
                           .list();
                    return result;
                }
            });
    }
}


配置文件:
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
    "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
	<!--定义数据源-->
	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
        <property name="url"><value>jdbc:mysql://localhost:3306/j2ee</value></property>
        <property name="username"><value>root</value></property>
        <property name="password"><value>32147</value></property>
    </bean>

	<!--定义一个hibernate的SessionFactory-->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource"><ref local="dataSource"/></property>
        <property name="mappingResources">
            <list>
                <!--以下用来列出所有的PO映射文件-->
				<value>lee/MyTest.hbm.xml</value>
            </list>
        </property>
        <property name="hibernateProperties">
        <props>
            <!--此处用来定义hibernate的SessionFactory的属性:不同数据库连接,启动时选择create,update,create-drop-->
			<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
            <prop key="hibernate.hbm2ddl.auto">update</prop>
        </props>
        </property>
    </bean>

	<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory">
			<ref local="sessionFactory" />
		</property>
	</bean>

    <!--定义DAO Bean-->
	<bean id="myTestDao" class="lee.MyTestDaoImpl">
        <property name="sessionFactory"><ref local="sessionFactory"/></property>
    </bean>

    <!--定义DAO Bean-->
	<bean id="myTestDao2" class="lee.MyTestDaoHibernate">
        <property name="sessionFactory"><ref local="sessionFactory"/></property>
    </bean>

    <!--定义DAO Bean-->
	<bean id="myTestDao3" class="lee.MyTestDaoHibernate2">
        <property name="sessionFactory"><ref local="sessionFactory"/></property>
    </bean>

	<bean id="dd" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
		<property name="transactionManager"><ref local="transactionManager"/></property>
        <property name="target"><ref local="myTestDao3"/></property>
        <property name="transactionAttributes">
            <props>
                <prop key="*">PROPAGATION_REQUIRED</prop>
            </props>
        </property>
    </bean>

</beans>

继承HibernateDAO的HibernateTemplate实例
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;


public class  BalanceDaoTemplate extends HibernateDaoSupport implements BalanceDao
{
	public void saveBalance(Balance b)
	{
		getHibernateTemplate().save(b);
	}
	public void deleteBalance(Balance b)
	{
		getHibernateTemplate().delete(b);
	}
	public void deleteBalance(int id)
	{
		Balance b = (Balance)getHibernateTemplate().load(Balance.class, new Integer(id));
		getHibernateTemplate().delete(b);		
	}
	public void updateBalance(Balance b)
	{
		
		getHibernateTemplate().saveOrUpdate(b);
		//getHibernateTemplate().update(b , org.hibernate.LockMode.WRITE);
	}
	public Balance getBalance(int id)
	{
		return (Balance)getHibernateTemplate().load(Balance.class, 
			new Integer(id),org.hibernate.LockMode.READ);
	}
}
分享到:
评论

相关推荐

    HibernateCallback使用方法

    HibernateCallback 使用方法 HibernateCallback 是 Hibernate 框架中的一种 callback 机制,允许开发者在持久层访问时执行自定义操作。HibernateCallback 是 Spring 框架中与 Hibernate 整合的重要组件,通过它可以...

    Hibernate方法总结

    总的来说,HibernateTemplate提供了一组强大的方法来简化Hibernate的日常操作,涵盖了从简单的数据存取到复杂的数据库操作,极大地提升了开发效率。在实际应用中,根据数据量、性能需求以及业务逻辑,选择合适的方法...

    hibernate执行原生sql语句

    在上面的代码中,我们使用 `HibernateCallback` 接口来执行原生 SQL 语句,该接口提供了一个 `doInHibernate()` 方法,该方法将在 Hibernate 事务中执行。我们可以在该方法中执行原生 SQL 语句,并使用 `Connection`...

    第24次课-1 Spring与Hibernate的整合

    开发者通过HibernateCallback,可以完全使用Hibernate灵活的方式来访问数据库,解决了Spring封装Hibernate后灵活性不足的缺陷。 24.3 Spring对Hibernate的简化 24.3.4 HibernateTemplate的复杂用法 ...

    对hibernate的封装 HibernateTemplate

    这个类将复杂的Hibernate API隐藏在后面,使得开发者可以更专注于业务逻辑,而不是数据库操作的细节。 **二、主要功能** 1. **事务管理**:HibernateTemplate自动管理Hibernate Session和Transaction,确保在事务...

    Hibernate学习笔记,使用Hibernate做数据层非常方便

    在Java开发中,Hibernate是一个非常流行的ORM(Object-Relational Mapping)框架,它简化了数据库操作,将数据库中的表映射为Java对象,使得开发者可以像操作普通对象一样进行数据库操作。本笔记主要探讨如何使用...

    spring+hibernate详解

    本文详细介绍了Spring与Hibernate集成的过程,包括如何配置`SessionFactory`、使用`HibernateTemplate`简化数据操作、通过`HibernateDaoSupport`提高代码可维护性以及利用`HibernateCallback`实现更复杂的业务逻辑。...

    HibernateS整合pring

    此外,`HibernateTemplate`还支持`HibernateCallback`接口,允许开发者在回调方法`doInHibernate(Session session)`中使用原生的Hibernate API,以应对更复杂的数据访问需求。这种方法确保了灵活性,即使在Spring的...

    Spring整合Hibernate 详解.doc

    HibernateTemplate是Spring为Hibernate提供的一种便捷的数据访问工具,它封装了对SessionFactory的操作,提供了执行HQL查询、保存、更新、删除等操作的方法。使用HibernateTemplate,开发者可以避免直接操作Session...

    Spring整合hibernate

    它通过回调机制(HibernateCallback)对Hibernate的操作进行封装,使开发者能够以一种更面向对象的方式处理数据库交互。例如,你可以通过实现HibernateCallback接口的doInHibernate方法,传入一个回调函数,执行特定...

    getHibernateTemplate

    `getHibernateTemplate()`方法是Spring框架中用于整合Hibernate ORM的一个关键接口,它是`HibernateDaoSupport`类...然而,对于一些特定或复杂的数据库操作,可能需要借助`HibernateCallback`或其他方式来扩展其功能。

    Spring/泛型Hibernate的实现

    // 实现具体的数据库操作方法 public List&lt;T&gt; find(String hql, Object... values) { return (List) this.hibernateTemplate.execute(new HibernateCallback() { @Override public Object doInHibernate...

    hibernate API

    在Java应用中,尤其是企业级应用,Hibernate 提供了一种对象关系映射(ORM)机制,使得开发人员可以使用面向对象的方式来操作数据库,而无需过多关注底层SQL语句的编写。 在给定的描述中,我们看到了两种使用...

    hibernate+spring实现分页

    - **说明**: 在该类中实现了 `PaginateInterface` 的方法,并利用Hibernate和Spring进行具体的数据库操作。 #### 五、关键代码解析 1. **计算总页数**: ```java if (pageSize != 0) { pageCount = count / ...

    HibernateTemplate汇总

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

    struts+spring+hibernate通用分页方法

    - 使用Hibernate提供的`HibernateTemplate`来执行数据库操作,包括获取总记录数和设置分页参数。 - 根据计算出的起始位置和每页记录数执行查询,获取分页后的数据列表,并将其封装到`PageSupport`对象中返回。 ####...

    MyEclipse的整合Struts+Spring+Hibernate简单例子开发

    - 在`com.lnic.dao`包中创建`UserDao`接口,定义获取用户信息的方法`getName(String id)`,以及其实现类`UserDaoImpl`,继承`HibernateDaoSupport`,使用Hibernate回调方法处理数据库操作。 - 配置`hibernate.cfg....

    HbernateTemplate的使用.pdf

    这提供了一种方式在事务内部执行复杂操作,例如批量处理或自定义查询。开发者可以在实现`doInHibernate(Session session)`方法后,通过`HibernateTemplate.execute(HibernateCallback&lt;T&gt; action)`方法执行回调。 2....

    Hibernate和Spring集成分页方法

    ### Hibernate与Spring集成分页方法详解 在Java企业级应用开发中,经常需要处理大量数据的展示和查询问题。为了提高用户体验并优化服务器资源利用,分页查询是一种非常实用的技术手段。本文将详细介绍如何在...

    ssh(structs,spring,hibernate)框架中的上传下载

    HibernateDaoSupport封装了HibernateTemplate,而HibernateTemplate封装了Hibernate所提供几乎所有的的数据操作方法,如execute(HibernateCallback action),load(Class entityClass, Serializable id),save(final ...

Global site tag (gtag.js) - Google Analytics